Duvo MCP
Server Details
Governed retail, FMCG, and CPG operational tools: runs, cases, approvals, audit-ready execution.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
Available Tools
350 toolsacceptClarityCaptureSuggestionAccept Clarity Capture SuggestionAInspect
Accept a pending Process Landscape capture suggestion and create the durable capture request (manager+).
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | ||
| suggestionId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a mutating, non-idempotent operation. The description adds meaningful behavioral context by stating that a durable capture request is created and that manager+ permission is required, going beyond the raw annotation flags.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that front-loads the action and object, then states the outcome and permission requirement. There is no wasted 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?
The description covers the core purpose, permission, and outcome, but does not explain the two required parameters or mention alternatives like dismissal. Given no output schema and no parameter descriptions, the definition is adequate but has clear gaps for an agent to invoke it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for explaining nodeId and suggestionId. It does not explicitly map either parameter to its meaning, though 'pending Process Landscape capture suggestion' partially implies suggestionId. The nodeId role is left entirely to inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Accept'), a specific resource ('pending Process Landscape capture suggestion'), and the resulting outcome ('create the durable capture request'). It clearly differentiates from siblings like dismissClarityCaptureSuggestion and acceptClarityTeamAssignmentSuggestion by naming the Process Landscape capture suggestion 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 provides clear context for when to use the tool: when a Process Landscape capture suggestion is pending and the user has manager+ permissions. It does not explicitly name alternatives or exclusions, but the role and state requirements give sufficient guidance for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
acceptClarityLandscapeNodeAccept Clarity Landscape NodeAInspect
Accept a proposed area folder into the active process landscape, so it stops being a proposal and becomes part of the real structure (organization admin+). Only area folders can be accepted; a proposed process becomes real through assignClarityLandscapeNodeTeam instead. Re-accepting an already-active area is a no-op.
| Name | Required | Description | Default |
|---|---|---|---|
| orgId | Yes | ||
| nodeId | Yes | The proposed area folder to accept. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses useful context: organization admin+ permission, area-folder-only constraint, and no-op behavior on re-acceptance. However, it directly contradicts the annotation 'idempotentHint: false' by asserting that re-accepting an already-active area is a no-op, which implies idempotent behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler. It front-loads the core purpose, then adds the key constraint, the alternative tool, and the no-op edge case. Every sentence carries useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, permissions, constraints, and an alternative, but the idempotency contradiction makes the behavioral model unreliable for an agent. Additionally, orgId is left undocumented in both the schema and the description, leaving a meaningful gap for a two-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%, with nodeId described but orgId not. The description adds meaning by clarifying that nodeId refers to a proposed area folder and that only area folders are valid, but it does not explain orgId beyond its parameter name, leaving part of the input semantics underspecified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Accept') and resource ('proposed area folder'), clearly explaining the state transition from proposal to active structure. It also distinguishes itself from assignClarityLandscapeNodeTeam, so an agent can tell them apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool (accepting proposed area folders) and when not to ('proposed process becomes real through assignClarityLandscapeNodeTeam instead'). It also clarifies the no-op behavior for already-active areas, giving clear operational guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
acceptClarityProcessJoinAccept Clarity Process JoinBInspect
Accept a clarity interview invite link and gain process access.
| Name | Required | Description | Default |
|---|---|---|---|
| token | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a non-read-only, non-idempotent mutation. The description adds that the outcome is gaining process access, but it does not disclose details like token consumption, failure behavior, or authorization requirements. This is acceptable but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence that front-loads the action and states the outcome. There is no wasted wording or unnecessary repetition of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one required parameter and no output schema, the description provides the core idea but leaves parameter semantics and post-acceptance behavior unstated. It is minimally viable but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description never mentions the 'token' parameter directly. It only says 'invite link,' which gives vague context but does not explain that the token comes from the invite link, its format, or how to supply it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Accept') plus a resource ('a clarity interview invite link') and an outcome ('gain process access'), making the tool's purpose clear. It does not explicitly differentiate from sibling tools like getClarityProcessJoinInfo or createClarityInviteLink, but the action is distinct enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when a user has a clarity interview invite link and wants to accept it. However, it provides no explicit guidance about alternatives, prerequisites, or cases where this tool should not be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
acceptClarityTeamAssignmentSuggestionAccept Clarity Team Assignment SuggestionAInspect
Accept a pending Process Landscape team-assignment suggestion and durably assign the suggested team (manager+).
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | ||
| suggestionId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is not read-only, and the description adds that the assignment is 'durable', clarifying persistence and mutation. It does not disclose whether the accepted suggestion is consumed, whether a previous assignment is overwritten, or any other side effects. Given the annotations, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tightly worded sentence with no filler, tautology, or repetition of the tool name. It front-loads the action and then gives the essential object and outcome, making it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter mutation, the description covers the core purpose and effect, and the annotations cover the read-only/destructive expectations. However, it does not explain how to obtain a valid nodeId or suggestionId, nor what happens after acceptance. An agent would likely need external knowledge or sibling tools to invoke this 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 what nodeId or suggestionId refer to beyond their self-descriptive names. It does not clarify where these IDs come from or how they relate to the 'suggested team' mentioned in the description. The description fails to compensate for the complete lack of 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 uses a specific verb ('Accept'), identifies the exact resource ('pending Process Landscape team-assignment suggestion'), and states the resulting effect ('durably assign the suggested team'). It clearly differentiates this from sibling tools like dismissClarityTeamAssignmentSuggestion and assignClarityLandscapeNodeTeam by focusing on accepting an existing suggestion rather than dismissing or directly assigning.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 confirming an already-pending team assignment suggestion, which gives some contextual usage guidance. However, it does not explicitly state when to choose this tool over alternatives, nor does it mention related tools such as dismissClarityTeamAssignmentSuggestion or how pending suggestions are discovered. The usage condition is mostly left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
addClarityLandscapeNodePersonAdd Clarity Landscape Node PersonAInspect
Add a person involved in the process behind a process landscape node. Name only records a placeholder; supplying an email also gives that person access to the process and emails them an invitation, so only pass an email the user asked you to invite.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| role | No | ||
| No | |||
| orgId | Yes | ||
| nodeId | Yes | A process landscape node that is linked to a real process. | |
| teamId | No | ||
| teamRole | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses a significant side effect: supplying an email gives the person access and sends an invitation. It also explains that name-only records a placeholder without access. This goes beyond the annotations (which only indicate readOnly, destructive, idempotent flags) and informs the agent of the consequence of including an email. However, it does not mention other potential effects like team membership or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence. It concisely states the main purpose, introduces the key caveat about email, and provides a clear instruction. There is no redundancy or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core action and important side effect, which is sufficient for an agent to understand what the tool does. It does not mention the return value or output (no schema provided), nor does it explain the optional team parameters. However, for a mutation tool, the essential behavior is captured. The missing details about teamRole and teamId are less critical for basic usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has low coverage (only nodeId has a description). The description adds meaning to 'name' (placeholder) and 'email' (triggers access/invitation), but does not explain orgId, teamId, teamRole, or role. Since the schema only describes 14% of parameters, the description only partially compensates, leaving several parameters ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Add a person' and the resource 'process landscape node'. It also distinguishes from sibling tools like batchAddClarityLandscapeNodePeople by implying a single-person add, and from updateClarityLandscapeNodePerson by indicating an add operation. The mention of email invitation further clarifies 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?
The description provides specific guidance on when to supply an email ('only pass an email the user asked you to invite'), which is a key usage decision. It implicitly differentiates from batch add by being singular, but does not explicitly state when to prefer this tool over update or batch variants. The email instruction is actionable and prevents unintended side effects.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
answerPulseDashboardQuestionAnswer Pulse Dashboard QuestionAInspect
Answer a pending question the Duvo Pulse agent asked and resume the paused run (creator or team editors). Use the toolCallId from the dashboard's message transcript.
| Name | Required | Description | Default |
|---|---|---|---|
| answers | Yes | ||
| artifactId | Yes | ||
| toolCallId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already marking this as non-read-only and non-destructive, the description adds useful behavioral context: the tool resumes a paused run and is restricted to creators/team editors. It also explains that toolCallId comes from the dashboard transcript. No contradiction with annotations is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It states the action, the governing context, the allowed actors, and the key parameter source in an economical way.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 description is clear about the tool's purpose and auth scope, it leaves two of three required parameters underspecified in a schema with zero descriptions. There is no output schema, so the description carries the full burden, but it does not explain what artifactId refers to or how the answers object should be populated.
Complex tools with many parameters or behaviors need more documentation. Simple 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 for undocumented parameters. It only explains toolCallId's origin. artifactId and the structure/semantics of the answers object are left undefined, leaving an agent to guess what keys and values the answers object expects.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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: 'Answer a pending question the Duvo Pulse agent asked' and clearly identifies the follow-up effect: 'resume the paused run'. This is not a tautology and is specific enough to differentiate from generic tools like respondToHumanRequest or sendPulseDashboardMessage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 the tool: only for pending Duvo Pulse agent questions on a paused run, and only for 'creator or team editors'. It also gives a concrete source for toolCallId. It stops short of explicitly naming alternatives or saying when not to use it, so it does not reach a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assignCaseLabelsAssign Case LabelsBInspect
Assign one or more labels to a case. Creates the labels on the queue if they don't already exist.
| Name | Required | Description | Default |
|---|---|---|---|
| labels | Yes | ||
| case_id | Yes | The case's unique identifier | |
| queue_id | Yes | The queue's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds a behavioral detail beyond the annotations: labels are created if they don't already exist. While the annotations already indicate the tool is not read-only, this note clarifies a side effect but does not cover other aspects like error handling or idempotency.
Agents need to know what a tool does to the 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 immediately states the action and the key side effect. It is well-structured with no redundant or extraneous information, making it easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the primary action and a notable side effect, but it omits details about the return value or any error conditions. Since no output schema is provided, the agent is left without knowledge of what the tool returns, which is a gap for a complete understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema describes queue_id and case_id, but the labels parameter lacks a description. The tool description does not compensate, offering no explanation of what 'labels' entails beyond its name. This leaves ambiguity for the labels structure, especially since it contains nested key-value pairs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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: 'Assign one or more labels to a case' and adds a specific side effect about creating missing labels. It distinctively describes the tool's function without ambiguity, and the name aligns well with the description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidance on when to use this tool versus alternatives like unlinkCaseLabels or updateCase. It merely states what the tool does, leaving the agent to infer the appropriate context from the tool name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assignClarityExtraCaptureRequestAssign Clarity Extra Capture RequestAInspect
Assign (or unassign, with user_id: null) a team member to fulfil an extra-capture request. Restricted to admins and managers.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | Team member to assign, or null to unassign | |
| process_id | Yes | The clarity process id | |
| request_id | Yes | The extra-capture-request id | |
| transformation_proposal_id | Yes | The automation proposal id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and destructiveHint=false, and the description adds useful behavior beyond that: the null-to-unassign semantic and the admin/manager restriction. It does not describe side effects on request status, but the core mutating behavior and permission boundary are disclosed 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 two sentences with no filler. It front-loads the primary action, then immediately covers the null unassignment case and the permission restriction. 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 four-parameter mutation tool with no output schema, the description covers the essential context: what action to perform, the special null case, and who is allowed to perform it. It could add more context about workflow sequence or relationship to sibling tools, but it is largely complete for invoking 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 description coverage is 100%, and each parameter already has a clear description. The description mostly reiterates the `user_id: null` unassignment semantics already present in the schema, and adds no extra meaning for process_id, request_id, or transformation_proposal_id. Baseline 3 is appropriate because the schema handles 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 states a specific verb and resource: 'Assign (or unassign, with `user_id: null`) a team member to fulfil an extra-capture request.' It clearly identifies what the tool does and differentiates it from sibling tools like assignClarityLandscapeCaptureRequest by the explicit 'extra-capture request' target.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 the tool: to assign or unassign a team member, with the unassign condition explicitly tied to `user_id: null`. It also states the role restriction ('Restricted to admins and managers'). It does not explicitly name alternative tools or when not to use them, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assignClarityLandscapeCaptureRequestAssign Clarity Landscape Capture RequestAInspect
Assign an open Process Landscape capture request to a team member, or unassign it by sending userId: null (manager+).
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | ||
| userId | Yes | ||
| requestId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a write operation (readOnlyHint: false) and not destructive. The description adds meaningful behavioral detail by specifying the manager+ permission requirement and the null-userId unassignment mechanism, which are not present in the schema or 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 entire description is one efficient sentence that front-loads the primary action, states the object, and adds the unassignment variant plus permission level. Every clause earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core behavior, target state, permission, and null-unassign case, which is enough for tool selection. However, with no output schema and no explanation of nodeId or requestId, an agent may still need domain context to invoke correctly, and there is no mention of behavior if the request is already assigned.
Complex tools with many parameters or behaviors need more documentation. Simple 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 the parameters. It clearly explains userId semantics (null means unassign), but nodeId and requestId are left implicit — the description does not state which ID identifies the capture request versus the landscape node. This leaves a meaningful gap for a 3-parameter tool with no 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 names a specific action (assign/unassign), a specific resource (open Process Landscape capture request), and the target (team member). It also explicitly distinguishes unassignment via userId: null, which differentiates it from sibling tools like assignClarityExtraCaptureRequest or assignClarityLandscapeNodeTeam.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 the tool applies: the capture request must be open, the caller should be manager+, and unassignment is done by passing userId: null. It does not explicitly name alternative tools or state when not to use it, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assignClarityLandscapeNodeTeamAssign Clarity Landscape Node TeamAIdempotentInspect
Set the owning team of a process in the process landscape (organization admin+). On a proposed process this accepts the proposal and creates the real process for that team; on an existing process it moves the process, its captures and its brief to another team.
| Name | Required | Description | Default |
|---|---|---|---|
| orgId | Yes | ||
| intent | No | Pass "accept-proposal" when the node is expected to still be a proposed process; the call then fails if someone already accepted it, instead of silently moving a real process. | |
| nodeId | Yes | The process node whose owning team changes. | |
| teamId | Yes | The team that owns the process from now on. A process always belongs to a team, so null is rejected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the side effects of moving captures and briefs, and explains the special behavior when intent is 'accept-proposal'. It also notes that null team is rejected. This aligns with the idempotent and non-destructive 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?
The description is concise and well-structured, fitting two sentences without unnecessary detail. It front-loads the core action and then elaborates with conditional behavior, making it easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides enough context to call the tool correctly for both proposed and existing nodes, and mentions the moving of captures and briefs. The absence of an output schema is acceptable, and the behavioral nuances are covered. Minor lack of explicit 'when not to use' is not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides descriptions for intent, nodeId, and teamId, clarifying their roles and constraints. The orgId lacks a description, but its purpose is inferable. The tool description reinforces parameter behavior but doesn't add significant new meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's primary action ('Set the owning team of a process in the process landscape') and distinguishes behavior for proposed vs. existing processes. It also notes the admin permission requirement, which helps agents understand 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 implicitly guides usage by explaining what happens in each scenario (accepting a proposal vs. moving an existing process). However, it does not explicitly contrast with sibling tools or state when to choose this over alternatives like acceptClarityLandscapeNode.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assignClarityProcessLabelsAssign Clarity Process LabelsCInspect
Assign process tags to a process.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| labels | No | ||
| labelIds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false, idempotentHint=false, and destructiveHint=false, so the description must explain side effects. It does not disclose whether assigning labels replaces existing process labels or appends to them, whether labels are created inline or referenced by ID, or what the response looks like. The word 'assign' only signals mutation without adding meaningful behavioral detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler, making it easy to scan and front-loaded with the main action. It is concise, though it is too sparse to be considered a fully developed definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter mutation tool with no output schema and no parameter descriptions, one sentence is not enough. It does not state whether labels and labelIds are alternatives, whether the operation replaces or adds tags, or what happens when only id is supplied, leaving agents unable to invoke it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage and the description adds no parameter-level meaning. It leaves the crucial labels-vs-labelIds distinction ambiguous, does not mention colorHue, and does not clarify that id is required while labels and labelIds are optional in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('assign') and identifies both the object ('process tags'/'labels') and the target ('a process'), so the core operation is clear. It does not explicitly distinguish itself from close siblings such as createClarityProcessLabel or assignClarityLandscapeNodeTeam, but it is not a tautology or misleading.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool instead of alternatives like assignCaseLabels, assignClarityExtraCaptureRequest, or unlinkClarityProcessLabels. The sentence merely restates the action and provides no conditions, exclusions, or selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
attachPulseDashboardConnectionAttach Pulse Dashboard ConnectionBInspect
Attach one of your connections (data sources) to a Duvo Pulse dashboard so the agent can use its tools (requires edit access).
| Name | Required | Description | Default |
|---|---|---|---|
| artifactId | Yes | ||
| connection_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false, so the agent knows this is a non-read, non-idempotent mutation. The description adds the edit-access requirement and the effect of enabling the agent's tools on the dashboard, which is useful context. It does not disclose whether attaching is additive vs. replacing existing connections, but it is not misleading.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the action and target, and the parenthetical clarifications ('data sources', 'requires edit access') earn their place. It is efficient without being terse to the point of ambiguity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-param mutation with no output schema, the description covers the core action and the key prerequisite (edit access). It falls short of complete because it doesn't state whether the attachment replaces or appends to existing connections, and there is no mention of validation effects or error conditions. Still adequate for an agent to attempt the 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?
Schema description coverage is 0%, but the parameter names are strongly self-descriptive: artifactId clearly refers to the dashboard and connection_id to the data source. The description maps 'connections (data sources)' to connection_id and 'dashboard' to artifactId, providing just enough disambiguation. Since param names carry most of the meaning, a 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 ('Attach'), a resource ('connections/data sources'), and a target ('a Duvo Pulse dashboard'), and adds the agent-relevant outcome ('so the agent can use its tools'). It is clear enough to distinguish from siblings like detachPulseDashboardConnection, though it doesn't name that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the usage context: attaching an existing connection to a dashboard, and it parenthetically adds the prerequisite 'requires edit access'. However, it does not state when to prefer this over listPulseDashboardConnections or createConnection, nor give any exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
attachQueueJsonSchemaAttach Queue Json SchemaAInspect
Put a queue on an existing Case schema, so both queues share one document and a later change moves them together. The queue must not already have a schema.
| Name | Required | Description | Default |
|---|---|---|---|
| queue_id | Yes | The queue's unique identifier | |
| family_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are all false, so they convey only that this is a mutating, non-idempotent, non-destructive operation in a closed world. The description adds meaningful behavioral context beyond that: the queue and Case will 'share one document' and 'a later change moves them together,' plus the precondition that the queue must not already have a schema. It does not mention failure behavior if the precondition is violated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The core action is front-loaded, the consequence is explained, and the precondition is delivered in the second sentence. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The conceptual model and precondition are covered, and there is no output schema to document. The main gap is that family_id — one of only two required parameters — is undefined in both the schema and the description, which an agent needs to call the tool correctly. The relationship to createQueueJsonSchema is also left implicit rather than explicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%: queue_id is described in the schema but family_id has no description. The tool description does not compensate — it never explains what family_id refers to (presumably the Case schema family), leaving half the required parameters semantically ambiguous for the agent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 and resource: 'Put a queue on an existing Case schema.' It further explains the resulting shared-document behavior, which distinguishes this from siblings like createQueueJsonSchema (new schema) and detachQueueJsonSchema (remove attachment) 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?
The phrase 'existing Case schema' establishes the context: use this when a Case schema already exists and a queue needs to be joined to it, as opposed to creating a fresh schema. It also states the precondition 'The queue must not already have a schema.' However, it does not explicitly name alternatives or say when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
attachRevisionIntegrationsAttach Revision IntegrationsAInspect
Attach one or more integrations to an agent revision. To pin specific connections after attachment, use pinRevisionIntegrationConnection. IMPORTANT for the case-queue-producer and case-queue-consumer integrations: attaching the integration alone is NOT enough — the slot points at no queue and will fail at runtime until you link at least one queue with replaceRevisionIntegrationQueues. After wiring up, call getRevisionCaseQueueSetup to confirm every case-queue slot has linked_queue_count > 0 before starting work.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | Agent ID | |
| build_id | Yes | Build ID | |
| integration_ids | Yes | Integration IDs (or custom integration IDs) to attach to the revision | |
| selected_automation_revision_id | No | The automation revision this edit is being made at. Pass a draft and the edit is folded into that draft itself; pass the active revision and the edit lands on a draft branched from it. A historic revision is rejected — it cannot be activated from without an explicit rebase. A revision belonging to a different automation is ignored, and the edit targets the automation the addressed agent belongs to. Omit to target the automation's active revision. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses a critical non-obvious behavior: attaching case-queue integrations alone leaves the slot pointing at no queue and will fail at runtime until queues are linked. It also recommends a verification step. While annotations already indicate this is a mutating operation (readOnlyHint=false), the description adds meaningful behavioral caveats 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, front-loaded with the core action, then the alternative tool, then the important workflow caveat. Every sentence earns its place; no fluff or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and lack of an output schema, the description is remarkably complete: it states the action, routes to the correct sibling for pinning, warns about a runtime failure mode, and tells the agent how to verify success. An agent has enough context to invoke this correctly and know when additional steps are required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaningful semantics for integration_ids by singling out case-queue-producer and case-queue-consumer integrations and explaining their runtime requirements. This goes beyond the schema's generic 'Integration IDs...' description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb and resource: 'Attach one or more integrations to an agent revision.' It also distinguishes itself from the sibling pinRevisionIntegrationConnection by explaining that pinning is a separate follow-up action. This is specific enough for an agent to know exactly 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 says to use pinRevisionIntegrationConnection for pinning connections after attachment. It also gives a clear workflow for case-queue integrations: attach → link queues via replaceRevisionIntegrationQueues → verify with getRevisionCaseQueueSetup. This is explicit when-to-use and when-to-use-alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
attachRevisionLoginAttach Revision LoginBInspect
Attach a login to a revision so the agent can use it during Runs spawned from that revision. Personal logins can only be attached by their owner; team-shared logins require builder permissions.
| Name | Required | Description | Default |
|---|---|---|---|
| agentId | Yes | ||
| buildId | Yes | ||
| exposedCredentialId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
It discloses permission requirements (owner vs builder) but does not mention idempotency, side effects on existing attachments, or what happens if the login is already attached. The description is partially transparent about behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, two sentences long, and contains no redundant or extraneous information. It efficiently conveys the core purpose and a key constraint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides the primary purpose and permission context, but it does not mention the return value, potential errors, or behavior in edge cases. Given the lack of output schema and parameter descriptions, it is not fully complete from an agent's perspective.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides no descriptions, and the tool description does not clarify the meaning of parameters like agentId, buildId, or exposedCredentialId. Users cannot infer from the description how these map to the concept of 'attach a login to a revision'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 (attach), the resource (login), and the target (revision), and explains the purpose (for use during Runs). It effectively distinguishes this from similar tools by focusing on the specific action and its intent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives like attachRevisionSecret or detachRevisionLogin. It provides permission constraints but lacks comparison or selection criteria for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
attachRevisionSecretAttach Revision SecretAInspect
Attach an env-var secret to a revision so its keys are injected into Runs spawned from that revision. Personal secrets can only be attached by their owner; team-shared secrets require builder permissions.
| Name | Required | Description | Default |
|---|---|---|---|
| agentId | Yes | ||
| buildId | Yes | ||
| credentialId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations carrying only generic false hints, the description adds meaningful behavioral detail: the operational effect on Runs and the ownership/permission constraints. It does not contradict annotations and gives an agent a realistic 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?
Two front-loaded sentences: the first states the action and effect, the second adds permission constraints. 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?
The description covers purpose, effect, and permissions, which is adequate for a simple mutation tool. However, with no output schema, no parameter descriptions, and no annotation details, an agent is left to infer the meaning of the three UUID parameters, so the definition is not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the undocumented agentId, buildId, and credentialId. It mentions 'secret' and 'revision' conceptually but never maps those concepts to the actual parameters or explains what each ID refers to.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Attach'), names the resource ('env-var secret to a revision'), and states the expected effect ('keys are injected into Runs spawned from that revision'). This clearly differentiates it from siblings like attachRevisionIntegrations and detachRevisionSecret.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 clear context for when this operation applies—attaching a secret to a revision for injection into Runs. It adds permission conditions for personal vs team-shared secrets, though it does not explicitly name alternatives or when-not-to-use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
authorizeMcpOAuthAuthorize Mcp OAuthAInspect
Start an OAuth-based connection with a remote MCP server using Dynamic Client Registration. Returns an authorization URL the user must open in a browser; once they grant consent, Duvo creates the matching connection and redirects the browser to the optional returnUrl.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Human-readable name to display for the connection. | |
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| return_url | No | Where to send the user's browser after consent completes. Accepts an absolute URL on a domain Duvo allows, or a path relative to the Duvo frontend (e.g. `/integrations/slack`). | |
| mcp_server_url | Yes | URL of the MCP server requiring OAuth. | |
| oauth_client_id | No | OAuth client ID of a client the user registered on the authorization server themselves (e.g. a NetSuite Integration record). Takes precedence over preregistered credentials and Dynamic Client Registration. Cannot be combined with custom_integration_id. On reconnect, omit to reuse the connection's stored credentials, or provide to replace (rotate) them. | |
| integration_type | No | Optional catalog integration type (e.g. `netsuite`, `asana`). When it names a known MCP OAuth catalog integration and `mcp_server_url` matches that integration's registered server, the connection is treated as a catalog connection; otherwise it requires the custom MCP servers capability. | |
| oauth_client_secret | No | Client secret for `oauth_client_id`. Omit for public clients (PKCE-only). | |
| custom_integration_id | No | Optional ID of a custom integration this connection should be associated with. | |
| reconnect_instance_id | No | When set, the OAuth flow will update the existing connection in place rather than creating a new one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond the annotations: it reveals an interactive browser step, that the tool returns an authorization URL, that user consent is required, and that Duvo creates the connection afterward. These are important operational traits that annotations alone do not convey. 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, dense sentence that front-loads the purpose and then explains the full flow. Every phrase earns its place: the method (Dynamic Client Registration), the intermediate result (authorization URL), the required user action, and the final outcome (connection creation and redirect). 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?
Given the tool's complexity (9 parameters, no output schema), the description is largely complete: it explains the interactive nature, the side effect of creating a connection, and the returnUrl behavior. It does not cover failure scenarios or mention prerequisites like required capabilities, but the schema covers parameter-level details well enough.
Complex tools with many parameters or behaviors need more documentation. Simple 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 individual parameters are already fully documented. The description adds some context by mentioning Dynamic Client Registration and the optional returnUrl behavior, but it does not substantially explain parameters beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Start an OAuth-based connection with a remote MCP server using Dynamic Client Registration.' It clearly explains the tool's core function and outcome (returns an authorization URL, creates a connection after consent). However, it does not explicitly distinguish itself from sibling tools like startNativeOAuth or checkMcpOAuth, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is reasonably implied: use this tool when you need to establish an OAuth connection to a remote MCP server. Yet the description never explicitly names alternatives, such as startNativeOAuth or probeMcpServer, or states when not to use this tool. This leaves the agent to infer routing from tool names rather than from explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batchAddClarityLandscapeNodePeopleBatch Add Clarity Landscape Node PeopleAInspect
Add one or more people to multiple Process Landscape nodes in a bounded batch. Email entries can create invitations; each node-person outcome reports success, conflict, or delivery failure.
| Name | Required | Description | Default |
|---|---|---|---|
| orgId | Yes | ||
| people | Yes | ||
| nodeIds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate non-read-only and non-idempotent behavior, and the description adds valuable context: email entries can create invitations, and each node-person outcome can report success, conflict, or delivery failure. This goes beyond the annotations by revealing side effects and per-item status granularity.
Agents need to know what a tool does to the 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 action and scope front-loaded, followed by the most important behavioral outcomes. Every sentence contributes information, and there is no redundant or vague filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating batch tool with no output schema and no field-level descriptions, the description covers the core action, bounded scope, invitation side effect, and outcome categories. However, it lacks explicit guidance on choosing this over the singular sibling, does not mention prerequisites or permission needs, and does not describe the expected response structure for the reported 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?
With schema description coverage at 0%, the description needed to compensate, but it only glosses over parameters as 'people' and 'Process Landscape nodes' and adds that email entries can create invitations. It does not explain the meaning of processRole, teamRole, or the relationship between nodeIds and people beyond the schema's raw names and constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb, resource, and scope: 'Add one or more people to multiple Process Landscape nodes in a bounded batch.' It also distinguishes itself from the singular sibling addClarityLandscapeNodePerson by emphasizing the multi-node batch nature and mentions the invitation side effect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 batch usage across multiple nodes and mentions boundedness, but it does not explicitly state when to use this tool versus addClarityLandscapeNodePerson or any alternatives. There are no exclusion criteria, prerequisites, or direct sibling comparisons, so the agent must infer the appropriate choice from the tool name and phrasing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
buildClarityAutomationBuild Clarity AutomationAInspect
Hand an automation proposal for a v2 clarity process off to the workflow-builder pipeline. Builds from transformation_proposal_id when supplied, otherwise from the process's live proposal. The proposal id is the durable idempotency key, so retries return the same run and a different proposal starts a new run. Returns 202 while the LLM run completes asynchronously, or 409 when the resolved proposal is still being written.
| Name | Required | Description | Default |
|---|---|---|---|
| process_id | Yes | The clarity process id | |
| transformation_proposal_id | No | Automation-proposal snapshot to build the automation from. Defaults to the process's live proposal. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description claims the proposal id is a durable idempotency key and that retries return the same run, but annotations declare idempotentHint=false. This is a direct contradiction between the described behavior and the annotation metadata, which the scoring rules treat as a serious failure.
Agents need to know what a tool does to the 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 well-structured: it states the action, explains the input-resolution rule, covers idempotency, and describes the two relevant HTTP statuses. Every sentence adds useful information without 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?
The description covers the key operational behaviors: input selection, idempotency, asynchronous completion, and conflict handling. It does not mention how to track the resulting run or what a successful response body contains, but for a fire-and-forget async build tool the provided context is largely 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 baseline is 3. The description adds meaningful semantics beyond the schema by explaining that transformation_proposal_id defaults to the process's live proposal and acts as an idempotency key, giving the agent a better understanding of how the parameter controls execution.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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: handing an automation proposal off to the workflow-builder pipeline and building an automation from a proposal. It is specific about the resource and action, though it does not explicitly differentiate itself from sibling tools like createAutomation or updateAutomation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 how the tool selects its input: it uses transformation_proposal_id when supplied, otherwise the process's live proposal. It does not explicitly state when to use this tool versus alternative automation-creation tools, but the parameter-selection logic is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulkCreateTeamInvitesBulk Create Team InvitesAInspect
Invite several people to a team in one call, emailing each invitation immediately. Returns per-batch counts: succeeded were invited, skipped were already on the team, already had a pending invitation, or were a duplicate of an earlier entry in the same batch, failed could not be emailed (those invitations are rolled back). The accept link is always built from the server-configured app origin.
| Name | Required | Description | Default |
|---|---|---|---|
| members | Yes | People to invite, at most 50 per request. An email already on the team, or already holding a pending invitation, is skipped rather than failing the batch. | |
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| frontendUrl | No | Deprecated. Accepted for backward compatibility and IGNORED: the accept link is always built from the server-configured app origin, so a caller cannot point invitation emails at another host. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint false, idempotentHint false), the description discloses immediate emailing, per-batch outcome categories, rollback of failed invites, and the server-controlled accept-link origin. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler: the main action is first, followed by the return semantics, then a clarifying note about the accept link. 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?
With no output schema, the description carries the burden of explaining return values; it defines succeeded/skipped/failed and rollback. Combined with the detailed team_id parameter schema, an agent has what it needs to invoke the tool correctly without guessing.
Complex tools with many parameters or behaviors need more documentation. Simple 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 genuine value by explaining member-level outcomes (succeeded/skipped/failed), duplicate handling within the same batch, and rollback semantics for failed emails, which the schema does not fully spell out.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action and resource: 'Invite several people to a team in one call, emailing each invitation immediately.' The bulk scope is explicit, which distinguishes it from single-invitation siblings such as createTeamInvite without needing to open the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Batch context is clear and the team_id parameter guidance is unusually specific (API keys pinned to one team should omit or pass the same team; OAuth callers should pass the target team). It stops short of explicitly naming an alternative for single invites or stating when not to use the tool, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulkReprocessCasesBulk Reprocess CasesAInspect
Re-process multiple cases on a chosen agent. Any active runs on the selected cases are interrupted first; the cases are then reset to pending and assigned to the chosen agent for the next dispatcher tick. The chosen agent must already be connected to the queue as a case-queue-consumer (with the trigger enabled or disabled).
| Name | Required | Description | Default |
|---|---|---|---|
| search | No | Free-text search selecting the cases when all_matching is true. | |
| filters | No | Filters selecting the cases when all_matching is true. | |
| agent_id | No | The agent that should run on the selected cases. Must be a consumer of this queue. | |
| case_ids | No | Explicit case IDs to act on (1-100). Provide this or set all_matching. | |
| queue_id | Yes | The queue's unique identifier | |
| all_matching | No | When true, act on every case matching the provided filters/search instead of an explicit id list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond the annotations: active runs are interrupted first, cases are reset to pending, and assignment happens on the next dispatcher tick. This is particularly valuable because the annotations do not convey these side effects, and the destructiveHint=false does not preclude run interruption.
Agents need to know what a tool does to the 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 convey the action, the side effects, and the prerequisite with no filler. The most important scoping information 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?
The description covers the core lifecycle and the key prerequisite for successful invocation. Given the nested filters and selection parameters, the schema carries the parameter details, and the description supplies the operational context that schema cannot. It does not explain return values, but for a bulk action with no output schema, the behavioral flow is the more important context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents each parameter. The description does not add much parameter-level meaning beyond the overall lifecycle, such as guidance on choosing between case_ids and all_matching. It stays at the baseline appropriate 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: 'Re-process multiple cases on a chosen agent.' It further clarifies the behavior by describing the reset and reassignment lifecycle, which distinguishes it from sibling tools like bulkUpdateCaseStatus or startRun.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 operational context and a concrete precondition: the chosen agent must already be connected to the queue as a case-queue-consumer with the trigger enabled or disabled. It does not explicitly contrast with alternatives, but the precondition and lifecycle detail give sufficient guidance for appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulkUpdateCasePriorityBulk Update Case PriorityAInspect
Set the priority of multiple cases. Priority only affects the order pending cases are picked up in: due postponed cases are handled first, then higher priority. It never interrupts runs or changes case status. Set none to clear priority back to the default.
| Name | Required | Description | Default |
|---|---|---|---|
| search | No | Free-text search selecting the cases when all_matching is true. | |
| filters | No | Filters selecting the cases when all_matching is true. | |
| case_ids | No | Explicit case IDs to act on (1-100). Provide this or set all_matching. | |
| priority | Yes | Target priority for each case. `medium`/`high` raise it above the default; `none` clears it. | |
| queue_id | Yes | The queue's unique identifier | |
| all_matching | No | When true, act on every case matching the provided filters/search instead of an explicit id list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by explaining the semantics of priority ordering, noting that due postponed cases are handled first and higher priority follows. It also discloses non-side-effects and documents the effect of setting priority to 'none', which is exactly the behavioral context an agent needs.
Agents need to know what a tool does to the 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 four compact sentences that front-load the action, then efficiently cover ordering semantics, non-effects, and the clearing behavior. There is no filler, repetition, or unnecessary restating of schema property names.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The behavioral and side-effect profile is well covered, and the schema fully documents parameters. However, the description does not address the selection-mode constraint between explicit case_ids and all_matching/filters, nor does it mention prerequisites like queue existence, so the agent must rely on the schema for these invocation details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 because the schema already documents all six parameters. The description adds only marginal value by explaining the default-clearing behavior of 'none', but it does not meaningfully clarify search, filters, case_ids, or all_matching 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 opens with a specific verb and resource: 'Set the priority of multiple cases.' It also differentiates itself from sibling tools by emphasizing the bulk scope and by explicitly stating that it never changes case status, separating it from bulkUpdateCaseStatus.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 this tool is relevant: priority only affects the order pending cases are picked up, and it explicitly excludes side effects like interrupting runs or changing status. It does not name alternative tools such as bulkUpdateCaseStatus, so it stops short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulkUpdateCaseStatusBulk Update Case StatusAInspect
Update the status of multiple cases to pending, completed, failed, or canceled. Interrupts any active runs and releases their case ownership, but never cancels their human-in-the-loop state — pending requests and open approval batches stay answerable/resolvable from the run view. Resetting to pending re-dispatches cases to the queue's trigger consumer.
| Name | Required | Description | Default |
|---|---|---|---|
| search | No | Free-text search selecting the cases when all_matching is true. | |
| status | Yes | Target status for each case. `completed`, `failed`, and `canceled` are terminal — `canceled` records a deliberate human stop, distinct from a system `failed`. `pending` resets the case (the queue's trigger consumer, if any, will re-claim it). `success` is not settable: it means an evaluation passed. | |
| filters | No | Filters selecting the cases when all_matching is true. | |
| case_ids | No | Explicit case IDs to act on (1-100). Provide this or set all_matching. | |
| queue_id | Yes | The queue's unique identifier | |
| all_matching | No | When true, act on every case matching the provided filters/search instead of an explicit id list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With all annotations false, the description carries the full disclosure burden and meets it thoroughly: it reveals that the call interrupts active runs, releases case ownership, preserves human-in-the-loop state (pending requests and approval batches stay answerable), and re-dispatches cases when resetting to pending. This is exactly the kind of side-effect context an agent needs and it does not contradict any annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense, front-loaded sentences: core action first, then side effects, then the pending-specific consequence. Every sentence earns its place, and none repeats information already present in the annotations or 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 6-parameter bulk mutation with nested filters and no output schema, the description plus the fully-covered schema give an agent almost everything needed: selection semantics, status semantics, and non-obvious side effects are all disclosed. The only gap is the return value/confirmation shape, which neither the description nor an output schema addresses.
Complex tools with many parameters or behaviors need more documentation. Simple 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 schema already documents status semantics (terminal states, 'success' not settable, pending reset) and selection semantics (case_ids vs all_matching). The description's only additive parameter insight is the trigger-consumer re-dispatch detail for pending, which is a marginal complement to the schema's 'pending resets the case'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Update the status of multiple cases') and enumerates the four settable target states (pending, completed, failed, canceled). This clearly distinguishes it from sibling tools like bulkUpdateCasePriority (priority) and bulkReprocessCases (reprocessing) without needing to inspect their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The bulk status-update context is clear and the behavioral consequences are spelled out, but the description never names alternatives (e.g., updateCase for single-case updates, bulkUpdateCasePriority for priorities) or states explicit when-not-to-use conditions. Usage is implied rather than directive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
checkMcpOAuthCheck Mcp OAuthBInspect
Probe an MCP server URL to discover whether it supports OAuth Dynamic Client Registration. Returns the authorization endpoint and required scopes when supported. Useful as a precursor to /v2/teams/:team_id/connections/oauth/mcp/start or /v2/teams/:team_id/connections. Performs no writes.
| Name | Required | Description | Default |
|---|---|---|---|
| mcp_server_url | Yes | URL of the MCP server to probe for OAuth support. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states 'Performs no writes,' which directly contradicts the readOnlyHint=false annotation. This is a serious inconsistency: the annotation implies the tool may modify state while the description asserts it never writes. Because the description contradicts structured metadata, it earns the minimum score and should be flagged.
Agents need to know what a tool does to the 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: it states the action, the return value, the intended precursor role, and the non-writing behavior. Key information is front-loaded before secondary details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity single-parameter tool with no output schema, the description covers the main purpose and partially describes returns ('authorization endpoint and required scopes when supported'). However, it does not explain what happens when OAuth Dynamic Client Registration is not supported, and the annotation contradiction undermines the reliability of the tool's behavioral contract.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter mcp_server_url has 100% schema description coverage, so the schema already explains it as 'URL of the MCP server to probe for OAuth support.' The description adds no extra semantic detail beyond what the schema provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies a specific action (probe an MCP server URL), a resource (MCP server), and a concrete outcome (discover OAuth Dynamic Client Registration support, return authorization endpoint and scopes). It does not explicitly differentiate itself from the similar sibling 'probeMcpServer', so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context by naming the endpoints this tool is a precursor to ('/v2/teams/:team_id/connections/oauth/mcp/start' and '/v2/teams/:team_id/connections'). However, it does not mention alternatives like probeMcpServer or state when not to use it, so no exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
completeClarityArtifactImportComplete Clarity Artifact ImportAInspect
Complete a Miro artifact import after uploading to the signed URL. The uploaded bytes are validated before the import becomes a usable Clarity capture.
| Name | Required | Description | Default |
|---|---|---|---|
| file_name | Yes | Name of the Miro export file. Supported extensions: .svg, .xml, .png, .jpg, .jpeg | |
| capture_id | Yes | The pending capture id returned by the upload-url endpoint | |
| process_id | Yes | The clarity process id | |
| content_type | Yes | MIME type of the uploaded Miro export file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal this is a non-read-only, non-idempotent operation. The description adds a useful behavioral detail: uploaded bytes are validated before the import becomes a usable capture. It does not disclose failure behavior or what happens if validation fails, but it provides more context 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?
Two short sentences with no filler or repetition. The core action is front-loaded, and the validation step is presented as a meaningful second sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main flow and outcome, and the schema fully documents parameters, but it omits response semantics and failure behavior for validation. For a non-idempotent state-changing tool without an output schema, this is a minimal but slightly incomplete definition.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all four parameters with descriptions and constraints at 100% coverage. The description adds general workflow context but no parameter-specific meaning beyond what the schema provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific verb ('complete') and resource ('Miro artifact import'), and adds process context about uploading to a signed URL and becoming a usable Clarity capture. It is distinguishable from sibling upload-completion tools by 'artifact import,' though it does not explicitly contrast 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 clearly states the temporal context: call this tool after uploading to the signed URL. It does not mention alternatives or exclusions, but the sequencing is explicit enough for an agent to understand when in the workflow this belongs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
completeClarityDocumentUploadComplete Clarity Document UploadAInspect
Complete a document capture after uploading to GCS via signed URL
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The clarity process ID | |
| fileName | Yes | Name of the uploaded document file | |
| captureId | Yes | The capture ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a non-read-only, non-idempotent, non-destructive mutation, so there is no contradiction. The description adds the useful precondition that the upload must already have happened, but it does not disclose what state changes occur, whether repeated calls fail, or what downstream effects completion triggers.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with the action front-loaded and the key prerequisite included. There is no redundant restatement of the schema or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter completion step with fully documented parameters, the description gives the essential workflow context: this call finalizes a document capture after the GCS signed-URL upload. It does not describe return values or detailed side effects, but those are not necessary for a basic completion call given the schema and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters with meaningful descriptions: id, captureId, and fileName are all explained. The description adds no parameter-level details beyond the schema, so it meets the baseline for high schema coverage without needing to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a concrete action ('Complete a document capture') and a specific workflow step ('after uploading to GCS via signed URL'), which separates it from upload-creation tools and from image/video completion tools. It does not explicitly contrast with completeClarityOrganizationDocumentUpload or completeClarityTeamDocumentUpload, so some sibling differentiation relies on the tool name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'after uploading to GCS via signed URL' provides a clear temporal condition and tells the agent when in the workflow this tool should be called. However, it does not name alternative completion tools or state when to prefer the organization/team/artifact variants, leaving routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
completeClarityImageUploadComplete Clarity Image UploadAInspect
Complete an image capture after uploading it to GCS via a signed URL
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The clarity process ID | |
| fileName | Yes | Name of the uploaded image file | |
| captureId | Yes | The capture ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish this is a non-read-only, non-idempotent, non-destructive write. The description adds one genuinely useful behavioral trait beyond that: the hard prerequisite that the GCS upload via signed URL must happen first. However, it does not disclose what 'complete' does to the capture's state, what happens if invoked before the upload, or the consequences of calling twice (relevant given idempotentHint=false).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single 15-word sentence that front-loads the verb and object, then appends the only necessary context (the GCS signed-URL prerequisite). There is no redundancy with the title, no fluff, and every word contributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 3 required params, no output schema, and no nested objects, the description covers the basic what and when. But it leaves gaps: it never references the createClarityImageUploadUrl pairing that produces the signed URL, it does not clarify how the three IDs relate to the upload flow, and with no output schema it says nothing about what a successful completion returns or triggers.
Complex tools with many parameters or behaviors need more documentation. Simple 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% — each of the three parameters (id, captureId, fileName) has a description in the schema. Per the baseline for high coverage, the description need not repeat param details, and it doesn't. The description adds no extra meaning about which ID maps to which part of the flow, but the schema already carries the documentation burden adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Complete') with a specific resource ('an image capture') and adds the scoping context ('after uploading it to GCS via a signed URL'). This cleanly distinguishes it from the sibling family: completeClarityVideoUpload, completeClarityDocumentUpload, and the other complete* tools differ by resource type (image vs video vs document/artifact).
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 'after uploading it to GCS via a signed URL' gives clear sequencing context: this is the second step of a two-phase flow, implicitly paired with a URL-creating tool like createClarityImageUploadUrl. It does not explicitly name alternatives or state exclusions (e.g., 'use completeClarityVideoUpload for videos'), so it stops short of full 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.
completeClarityOrganizationDocumentUploadComplete Clarity Organization Document UploadAInspect
Complete an organization document capture after uploading to GCS; extracts text and stores it as a transcript so it feeds Process Landscape generation
| Name | Required | Description | Default |
|---|---|---|---|
| orgId | Yes | ||
| fileName | Yes | Name of the uploaded document file | |
| interviewId | Yes | The organization interview ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it non-read-only and non-destructive; the description adds useful behavioral context by stating it extracts text, stores a transcript, and feeds Process Landscape generation. It does not mention idempotency consequences, but idempotentHint=false already signals that risk.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence states the action, the precondition, the processing behavior, and the downstream consumer with no filler. Every clause contributes to helping the agent decide and invoke the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter, multi-step completion operation with no output schema, the description covers the main workflow and downstream outcome, which is enough for a capable agent. The main gap is that it does not describe the return value or what happens on failure, but these are minor against the clear purpose and schema coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema describes interviewId and fileName but leaves orgId undocumented at 67% coverage. The description does not add parameter-specific meaning or explain how orgId/interviewId/fileName relate to the capture, so it neither compensates for the missing orgId description nor enriches the 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 a specific verb ('complete'), identifies the resource ('organization document capture'), and defines what completion entails: text extraction and transcript storage for Process Landscape generation. This distinguishes it from sibling upload-completion tools like completeClarityTeamDocumentUpload or completeClarityImageUpload.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 a clear precondition ('after uploading to GCS') and implies the organization-document workflow, but it does not name alternatives or say when not to use it. An agent must infer that this is the org-specific counterpart to completeClarityDocumentUpload rather than being told.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
completeClarityTeamDocumentUploadComplete Clarity Team Document UploadAInspect
Complete a team document capture after uploading to GCS; extracts text and stores it as a transcript so it feeds Process Landscape generation
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| fileName | Yes | Name of the uploaded document file | |
| interviewId | Yes | The team interview ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the key state-changing behavior beyond the annotations: it 'extracts text and stores it as a transcript'. This aligns with readOnlyHint=false and destructiveHint=false, and adds useful context about what happens when the tool is invoked. It does not discuss idempotency or failure modes, but the core behavioral trait is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the action and context, then states the purpose. Every clause earns its place: the GCS precondition, the extraction/storage behavior, and the downstream use. There is no extraneous 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 tool with no output schema and three well-documented parameters, the description gives the essential operational context: when to call it, what it does, and why it matters. It could mention return behavior or error conditions if the GCS upload hasn't happened, but those are not critical for basic 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?
Schema description coverage is 100%, so the input schema already documents interviewId, fileName, and team_id thoroughly. The tool description adds no additional parameter-specific meaning, which is acceptable at the baseline given the schema's strong coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Complete'), a specific resource ('team document capture'), and the concrete outcome ('extracts text and stores it as a transcript'). The phrase 'after uploading to GCS' clearly situates it in a two-step upload pipeline, and 'team' distinguishes it from sibling tools like completeClarityDocumentUpload and completeClarityOrganizationDocumentUpload.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 a clear sequential context: use this after the file has been uploaded to GCS. It also signals downstream relevance by noting the transcript 'feeds Process Landscape generation'. It does not explicitly enumerate when-not-to-use or name alternative sibling tools, but the team-specific wording makes the intended context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
completeClarityVideoUploadComplete Clarity Video UploadAInspect
Complete a video capture after uploading to GCS via signed URL
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The clarity process ID | |
| fileName | Yes | Name of the uploaded video file | |
| captureId | Yes | The capture ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal that this is a non-read-only, non-idempotent mutation, so the description does not need to repeat those hints. It adds the useful sequencing context that the upload must already have happened, but it does not disclose what 'complete' does to the capture (e.g., status transition, validation, irreversibility).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It leads with the action and resource, then adds the essential precondition, making it efficient for an agent 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 three-parameter tool with no output schema and no nested objects, the description plus schema is adequate to invoke the tool: it names the action, the resource, and the required precondition. It could be more explicit about what completing the upload entails or that it pairs with createClarityVideoUploadUrl, but nothing essential is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all three parameters with clear descriptions (clarity process ID, capture ID, uploaded file name) at 100% coverage. The description adds no parameter-specific semantics beyond tying fileName to the GCS upload flow, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Complete a video capture') and the resource ('video capture'), with an explicit precondition ('after uploading to GCS via signed URL'). The word 'video' plus the completion-vs-creation verb clearly sets it apart from sibling tools like createClarityVideoUploadUrl and the other complete* upload variants.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly indicates the triggering condition: the tool should be called only after the video file has been uploaded to GCS via a signed URL. It does not explicitly name alternative tools or list when-not-to-use scenarios, but the context is sufficient for basic selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
consumeAgentSuggestionConsume Agent SuggestionAInspect
Apply a suggestion: stage its change into the Agent's draft revision, then auto-clear any pending suggestions it makes moot.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The suggestion's unique identifier | |
| revision_id | No | ||
| create_new_draft | No | ||
| selected_automation_revision_id | No | The automation revision this edit is being made at. Pass a draft and the edit is folded into that draft itself; pass the active revision and the edit lands on a draft branched from it. A historic revision is rejected — it cannot be activated from without an explicit rebase. A revision belonging to a different automation is ignored, and the edit targets the automation the addressed agent belongs to. Omit to target the automation's active revision. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses two meaningful side effects: the suggestion's change is staged into the Agent's draft revision, and pending suggestions made moot are auto-cleared. This is valuable behavioral context that complements the non-readonly annotation without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence that front-loads the core action and includes the most important side effect. Every word earns its place with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating action with no output schema, the description captures the essential behavior: applying, staging into a draft, and clearing moot suggestions. It could mention what happens to the applied suggestion itself or failure conditions, but the core calling context is sufficiently clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%, with revision_id and create_new_draft lacking descriptions, and the tool description does not directly explain those parameters. However, the phrase 'Agent's draft revision' provides useful context for understanding revision-related fields, and selected_automation_revision_id already has a thorough schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'Apply a suggestion' and then explains the exact mechanism — staging the change into the Agent's draft revision and auto-clearing moot suggestions. This is specific enough to distinguish it from rejectAgentSuggestion and the Clarity-focused accept/dismiss suggestion 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 primary usage is implied by the verb 'Apply' — use this tool when you want to accept an agent suggestion — but it never explicitly contrasts with rejectAgentSuggestion or other accept variants. There is no stated when-not-to-use guidance or prerequisite such as 'only after reviewing via getAgentSuggestion'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createAgentCreate AgentAInspect
Create a new agent. Optionally include a build configuration to create the first build in the same request.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Human-readable agent name | |
| type | No | Flavour of the step to create. Fixed at creation — it selects the config family every build of this step must use, and the two cannot be mixed. | agent |
| build | No | Optional inline build. When present, a first build is created alongside the agent. Only valid for an agent step. | |
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| thread_id | No | Existing thread ID to associate with the agent | |
| automation_id | No | Automation this agent belongs to. If omitted on a team using the automations model, a new automation named after the agent is created automatically. | |
| source_build_id | No | Build ID whose case-queue-consumer setup should be copied to the new agent |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal a mutating, non-idempotent operation (readOnlyHint=false, idempotentHint=false), and 'Create' is fully consistent with them — no contradiction. The description adds one genuine side-effect disclosure: passing a build creates the first build in the same request. Other behavioral traits, such as automation_id's note that an automation is auto-created when omitted and type being fixed at creation, live in the schema rather than the description, leaving the description itself thin on behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences totaling roughly twenty words, with the core purpose front-loaded in sentence one and the optional capability in sentence two. There is no filler, no repetition of the title or schema, and every word earns its place. This is a model of compact description 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?
Despite high complexity — 7 parameters with deeply nested build/config/data objects — the schema comprehensively documents every level, including side effects and alternative routes (code-step builds routed to revisions, team_id key-pinning rules for API vs OAuth callers). The main description is brief, but the definition as a whole equips an agent to select and invoke the tool correctly. The absence of an output schema and any hint of what the create response returns keeps this from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline of 3 applies, and the schema is unusually rich: files distinguishes path from GCS id, agent model conditions on the team's oss_models flag, plugins distinguishes built-ins from GitHub URLs, and subAgents documents its own retirement. The main description contributes only marginal parameter context ('Optionally include a build configuration'), which merely echoes the schema's own detailed build documentation. The schema carries the load here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Create a new agent,' a specific verb+resource that clearly matches the tool name and sets it apart from narrow siblings like createAgentCaseTrigger, createAgentFolder, and createAgentSlackTrigger. The second sentence adds real scope detail (optional inline build), clarifying this is the full agent-creation entry point. It stops short of a 5 because it never explicitly names what it is not, such as duplicateAgent or the code-step revision path.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The top-level description only implies when to use the tool (whenever a new agent is needed) and gives no explicit alternatives or exclusions. The strongest guidance is embedded in the schema: the build.config description explicitly says code steps' first builds must go through POST /v2/agents/{agent_id}/revisions, and the type description warns the step flavor is fixed at creation. There is no routing guidance against related tools like updateAgent or duplicateAgent, so guidance is partial rather than complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createAgentCaseTriggerCreate Agent Case TriggerAInspect
Create a case trigger for an agent. An agent may have at most one case trigger; this returns 409 if one already exists.
| Name | Required | Description | Default |
|---|---|---|---|
| enabled | Yes | Whether the trigger is active. Disabled triggers do not dispatch runs. | |
| agent_id | Yes | The agent's unique identifier | |
| concurrency | No | Concurrency cap for the target queue. The cap is queue-wide, so this affects every Agent working the queue, not just this trigger. Only 1 (run cases one at a time) or null (reset the whole queue's cap to the platform default) can be set here; higher caps are configured per-queue via PATCH /v2/admin/case-queues/{queueId}/concurrency. Omit to leave the queue's current cap unchanged. | |
| case_queue_id | Yes | Queue whose new cases should trigger this agent |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a write operation (readOnlyHint=false). The description adds valuable behavioral context beyond that: the at-most-one invariant and the specific 409 failure mode when a trigger already exists. It does not detail success behavior or side effects, but the conflict behavior is a strong 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?
Two sentences, no filler. The primary action is front-loaded, and the important uniqueness/conflict constraint follows immediately. Every sentence adds useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema comprehensively documents all four parameters, and the description supplies the key behavioral constraint for a create operation. The main gap is that it does not describe the successful response shape or explicitly guide the agent toward update/upsert alternatives when a trigger already exists, but these are minor for this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 100%, so the description does not need to restate parameter meanings. The description adds no parameter-specific semantics beyond what the schema already provides; it only describes a trigger-level constraint.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 and resource: 'Create a case trigger for an agent.' It clearly differs from sibling tools by specifying 'case trigger' rather than, say, a Slack trigger, and it adds the meaningful uniqueness constraint that an agent can have at most one.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 creating a new case trigger and that an existing trigger will cause a 409. However, it does not explicitly mention alternatives such as updateAgentCaseTrigger or upsertAgentTrigger, nor does it say when to prefer one over the others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createAgentFolderCreate Agent FolderCInspect
Create a new agent folder.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Human-readable folder name | |
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| parent_folder_id | No | Parent folder ID for nested folders. Omit or null to create at the root level. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=false, destructiveHint=false, and idempotentHint=false, but the description adds no behavioral context beyond the creation act itself. It does not mention side effects, return values, uniqueness constraints, or how the folder relates to agents. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler, which is appropriate for a simple create operation. However, it is minimal enough that it essentially restates the title, so it does not quite reach the highest tier.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 definition is largely sufficient given the fully documented schema and simple semantics. However, there is no output schema, and the description does not indicate what a successful creation returns or how the new folder is subsequently used, leaving some 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 description coverage is 100%, so the schema already documents all three parameters, including detailed team_id and parent_folder_id semantics. The description itself adds no parameter-level 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?
The description states a specific verb and resource: 'Create a new agent folder.' This is unambiguous and clearly distinct from siblings like createAgent or createClarityFolder by resource type, though it does not explicitly name those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus related tools such as listAgentFolders, updateAgentFolder, deleteAgentFolder, or moveAgentsToFolder. There are no usage conditions, exclusions, or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createAgentSlackTriggerCreate Slack Channel TriggerAInspect
Create a Slack channel trigger on an agent (Agent in the Duvo UI): the agent starts a Run whenever a matching message is posted in the channel. An agent can carry one trigger per channel, so call this once per channel. The Slack workspace must be installed for the team AND bound to the agent's live build first (see the Slack bound-workspaces endpoint) — otherwise this returns 400.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | The agent's unique identifier | |
| channel_id | Yes | Slack channel ID to watch, e.g. `C0123ABCD`. | |
| is_private | No | Whether the channel is private. Defaults to false. Private channels require the Duvo Slack app to be invited to the channel. | |
| match_rule | Yes | Which channel messages fire the trigger: `{"kind":"all"}` for every message, or `{"kind":"contains","values":["invoice"]}` to match keywords. | |
| channel_name | Yes | Slack channel name shown in Duvo, without the leading `#`, e.g. `support-inbox`. | |
| trigger_type | Yes | Trigger type. Only `slack_channel_message` (a message posted in a Slack channel) is supported here. | |
| slack_team_id | No | Slack workspace (team) ID the channel belongs to, e.g. `T0123ABCD`. Defaults to the team's default installed workspace. Discover the workspaces an agent can use with the bound-workspaces endpoint. | |
| integration_instance_id | No | Specific bound Slack connection to run the trigger off. Omit to use your own connection, or pass one returned by the bound-workspaces endpoint. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only convey read/write/idempotency/destructiveness flags. The description goes beyond them by explaining the trigger's side effect (a Run starts on matching messages), the one-trigger-per-channel limit, the binding prerequisite, and the 400 failure mode. This is substantial extra 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?
Three sentences carry all operative information with no filler: purpose/behavior, cardinality constraint, and prerequisite/failure. The most important scoping guidance is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter create operation with no output schema, the description covers what happens on success, the per-channel limitation, prerequisite setup, and the error condition, while the schema documents every parameter. There are no invocation requirements left unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with each of the 8 parameters already described by name, format, defaults, and examples. The description reinforces the general matching and per-channel concepts but adds no parameter-specific semantics beyond the schema, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource — 'Create a Slack channel trigger on an agent' — and then defines the tool's effect as starting a Run when a matching message is posted. Naming 'Slack channel trigger' distinguishes it from sibling case-trigger tools such as createAgentCaseTrigger.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 operational conditions: call once per channel, and only after the Slack workspace is installed and bound to the agent's live build, with a 400 failure otherwise. It doesn't explicitly contrast with alternatives like upsertAgentTrigger or updateSlackTrigger, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createAutomationCreate AutomationAInspect
Create a new automation. Its first agent is created alongside it so the caller lands on something editable. On a team on revision semantics the automation holds a single draft revision and no live revision, with the agent's default build bound into that draft, and the first activation makes the draft revision 1; on any other team the automation is a bare container and the build stands on its own.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Human-readable automation name. | |
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even with annotations already indicating this is a mutating, non-idempotent operation, the description adds substantial behavioral disclosure: the first agent is auto-created, the revision/draft lifecycle is explained, the default build is bound into the draft, first activation promotes to revision 1, and non-revision teams get a bare container. This is exactly the kind of side-effect detail that agents cannot infer 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?
Two sentences carry the core action up front and then pack necessary behavioral nuance into a dense but efficient second sentence. There is no filler, and the conditional structure clearly separates revision-semantics teams from all others.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is behaviorally complete for the two team scenarios and covers the side effects of creation. It does not mention what the caller receives back (e.g., the created automation's ID), which would be helpful given there is no output schema, but the schema and annotations cover most remaining operational needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both name and team_id already well documented in the input schema. The tool description adds no parameter-specific meaning beyond what the schema provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 automation') and adds that the first agent is created alongside it, which clearly distinguishes it from related create tools like createAgent. The added behavioral detail makes the tool's purpose unmistakable even among a large sibling set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides rich context about how the tool behaves on teams with revision semantics versus other teams, which helps a caller set expectations. However, it never explicitly names alternatives such as createAgent for standalone agent creation or updateAutomation for modifying an existing automation, so when-to-use versus alternatives is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createCaseAttachmentUploadUrlCreate Case Attachment Upload UrlAInspect
Issue a signed URL for uploading a file to a case. The client must PUT the bytes to the returned URL with the returned Content-Type, then call the finalize endpoint so the attachment becomes visible on the case.
| Name | Required | Description | Default |
|---|---|---|---|
| case_id | Yes | The case's unique identifier | |
| filename | Yes | ||
| queue_id | Yes | The queue's unique identifier | |
| mime_type | Yes | ||
| size_bytes | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes meaningfully beyond the sparse annotations (all false hints) by disclosing that the tool issues a signed URL and that the attachment does not become visible until the finalize endpoint is called — a genuinely non-obvious two-phase behavioral trait. It also specifies the PUT-with-Content-Type requirement, which an agent could not infer from the schema. Signed-URL expiry and authorization needs are not mentioned, but the core behavioral disclosure is strong.
Agents need to know what a tool does to the 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, roughly 50 words, with the core purpose front-loaded in the first sentence and the essential follow-up protocol in the second. Every clause earns its place; there is no filler or restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a moderate-complexity tool with no output schema and minimal annotations, the description conveys the critical facts: what is returned (signed URL and Content-Type), the exact PUT protocol, and the dependency on the finalize endpoint. Minor omissions — signed-URL expiry, explicit size-limit emphasis, and failure behavior — leave some room, but the core flow is fully actionable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 40% (case_id and queue_id), so the description must partially compensate for filename, mime_type, and size_bytes. It adds real meaning by tying mime_type to the 'returned Content-Type' and framing the file fields as the payload to PUT, but it does not individually explain their constraints or semantics, leaving the 50MB size ceiling and length limits solely to 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 and resource — 'Issue a signed URL for uploading a file to a case' — which is unambiguous and anchored to the case domain, distinguishing it from generic upload-URL siblings like createFileUploadUrl. The finalize-step mention further scopes its role. It does not explicitly name a sibling for disambiguation, but the case-specific framing is sufficient.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit protocol guidance: the client 'must PUT the bytes to the returned URL with the returned Content-Type, then call the finalize endpoint,' which tells an agent exactly how to consume the result and that a mandatory follow-up call exists. It does not state exclusions or route among alternatives such as createFileUploadUrl, but the intended usage context is clearly conveyed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createCaseQueueEvalRubricCreate Case Queue Eval RubricAInspect
Add one case-level evaluation rubric to a queue's current rubric set. Case-level rubrics judge the whole case (across every Run that touched it) as a Pass/Fail question at settlement. The rubric is added to the queue's current version (build-set) — the set new cases are judged against; a queue only gets one after its first Agent-processed case settles, so this fails with 409 before then, and once the version holds 12 rubrics.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Short, human-readable Pass/Fail rubric title. | |
| queue_id | Yes | The queue's unique identifier | |
| description | Yes | A 1-2 sentence Pass condition phrased as a question. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide only false/non-informative hints, so the description carries the full burden. It discloses meaningful behavioral detail: rubrics attach to the current version/build-set, the 409 precondition, and the 12-rubric cap. This is exactly the kind of context an agent needs beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence front-loads the core purpose, and the second sentence earns its place by defining case-level evaluation. The third sentence is dense, packing versioning, the 409 condition, and the 12-rubric limit into one clause, but it remains informative and reasonably sized for the 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 no output schema and non-informative annotations, the description gives enough context to invoke the tool correctly: the target version, the prerequisite, the failure mode, and the maximum rubric count. The only minor weakness is the slightly ambiguous phrasing around the 12-rubric condition, but it does not block correct use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds semantic value beyond the schema by explaining that rubrics are Pass/Fail questions evaluated at settlement across the whole case. This helps the agent understand what the title and description parameters should contain, even though the schema already documents their basic format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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: 'Add one case-level evaluation rubric to a queue's current rubric set.' It clarifies what makes this rubric distinct ('judge the whole case across every Run that touched it') and distinguishes it from siblings like createEvalRubric and replaceCaseQueueEvalRubrics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 usage context: this adds a single rubric to the current build-set, only works after the first Agent-processed case settles, and fails with 409 before then. It does not explicitly name alternative tools such as replaceCaseQueueEvalRubrics, but the additive scope and constraints make the intended use reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createCasesCreate CasesAInspect
Create one or more cases in a queue. Provide either a single case object or a cases array (1-100); providing both returns 400. Each case accepts a title (max 500 chars), optional free-form data, optional labels that will be assigned to the case on creation (missing labels are created on the queue), and an optional priority (none, medium, or high; medium/high raise it above the default in the queue, none is the default). Priority only affects the order pending cases are picked up in: due postponed cases are handled first, then higher priority.
| Name | Required | Description | Default |
|---|---|---|---|
| case | No | ||
| cases | No | ||
| queue_id | Yes | The queue's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the sparse annotations, it discloses the 400 error when both forms are provided, auto-creation of missing labels on the queue, and precise priority-ordering semantics. This is substantial behavioral information not inferable 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 core purpose is front-loaded, and every sentence carries meaningful usage or behavioral information. There is no filler, redundancy, or vague 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?
Input behavior is thoroughly covered, including parameter interaction and side effects. Since there is no output schema, the description's only notable gap is that it doesn't specify what the tool returns on success, such as created case IDs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With low schema coverage, the description compensates by explaining the `case` vs `cases` relationship, title max length, free-form `data`, label creation behavior, and the priority enum. It also adds the mutual-exclusion error condition not present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the exact operation and target: 'Create one or more cases in a queue.' It clearly distinguishes single and bulk creation modes and reads unambiguously against sibling tools like updateCase or assignCaseLabels.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 concrete invocation guidance: use either a single `case` object or a `cases` array, never both, with a 1-100 limit. It doesn't explicitly name alternatives such as `updateCase` or `assignCaseLabels`, so it has clear context but no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createClarityArtifactImportUploadUrlCreate Clarity Artifact Import Upload UrlAInspect
Create a signed upload URL for importing a Miro export into a Clarity v2 process. Supports SVG, XML, PNG, and JPEG exports. The caller must upload the file to the returned URL, then complete the import.
| Name | Required | Description | Default |
|---|---|---|---|
| file_name | Yes | Name of the Miro export file. Supported extensions: .svg, .xml, .png, .jpg, .jpeg | |
| process_id | Yes | The clarity process id | |
| content_type | Yes | MIME type of the Miro export file | |
| extra_capture_request_id | No | Optional extra-capture-request id to bind this import to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses a non-obvious two-step behavior: this tool only creates the URL; the caller must separately upload and then complete the import. This goes beyond the minimal annotation set, which only says readOnlyHint=false and destructiveHint=false. It does not mention expiration or side effects, but the core workflow is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: the first states the operation, the second lists supported formats, and the third explains the required follow-up. The most important scoping 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?
With no output schema, the description still makes clear that a URL is returned for uploading and that a completion step is required. It could name the exact complete-import sibling tool or describe the response shape, but the essential context for invocation and next steps is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents process_id, file_name, content_type, and extra_capture_request_id. The description reinforces the supported file types but does not add meaningful parameter semantics beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb, resource, and scope: 'Create a signed upload URL for importing a Miro export into a Clarity v2 process.' It names the supported formats and, by focusing on Miro artifacts, is distinguishable from sibling tools like createClarityDocumentUploadUrl and createClarityImageUploadUrl.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear workflow context: the caller must upload the file to the returned URL and then complete the import. It does not explicitly name alternatives or exclusion conditions, but the Miro/Clarity-v2 framing is specific enough to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createClarityDocumentUploadUrlCreate Clarity Document Upload UrlBInspect
Create a signed URL for uploading a PDF, TXT, Markdown, BPMN, XLSX, or CSV document directly to GCS
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The clarity process ID | |
| fileName | Yes | Name of the document file | |
| contentType | Yes | MIME type of the document | |
| extraCaptureRequestId | No | Extra-capture-request id to bind this capture to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a mutating, non-read-only, non-idempotent operation. The description adds useful context about direct GCS upload and supported file types, but it does not disclose the full upload flow or side effects beyond signed URL creation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single front-loaded sentence with no filler. It efficiently communicates the action, supported formats, and destination while leaving schema details to the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a straightforward signed-URL generation tool, and the lack of an output schema is partly mitigated by the description implying the returned artifact is a URL. However, it omits the relationship to the completion step and does not distinguish this endpoint from several closely related upload-URL siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and parameter descriptions already provide clear meanings for id, fileName, contentType, and extraCaptureRequestId. The description reinforces the document-upload purpose but adds no additional 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 action (create a signed URL) and resource (Clarity document upload to GCS), and lists the supported formats. It distinguishes from image/video upload tools via the format list, but does not differentiate among closely related document-upload siblings such as organization, team, or artifact uploads.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus sibling upload tools like createClarityOrganizationDocumentUploadUrl or createClarityTeamDocumentUploadUrl. It also does not mention follow-up steps such as completing the upload after GCS transfer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createClarityFolderCreate Clarity FolderCInspect
Create a process folder
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the folder to create. | |
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate this is not read-only, not idempotent, and not destructive, and the description adds no behavioral context beyond the word 'create.' It does not disclose side effects, naming collisions, permissions, or what kind of object is produced, so the description adds little beyond the structured metadata.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no filler or repetition. It is front-loaded and easy to parse, though it is minimal to the point of under-specification in other dimensions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter create operation with a rich schema, the description is minimally adequate: the agent knows it creates a folder and needs a name. However, it lacks context about what a process folder is used for, whether folders are hierarchical, and what the tool returns, leaving some ambiguity for an agent navigating a large sibling toolset.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the parameter descriptions already document the 'name' field and thoroughly explain 'team_id', including API-key and OAuth behavior. The tool description adds no extra parameter-level meaning, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action and object: 'Create a process folder.' It is not a tautology and the verb 'create' maps directly to the tool's function. However, it does not differentiate from sibling folder tools such as createAgentFolder or clarify what a 'process folder' is within the Clarity domain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like createAgentFolder, setupClarityFoldersFromLandscape, or updateClarityFolder. There is no mention of prerequisites, team context, or folder hierarchy, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createClarityGuidanceCreate Clarity GuidanceCInspect
Create a new automation guidance message for a clarity process
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The clarity process ID | |
| content | Yes | Automation guidance to add to the process. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, so the tool is understood to mutate state, but the description adds no behavioral context: it does not state whether creation is idempotent, whether it appends to existing guidance, what side effects occur, or what happens on duplicate IDs. For a mutation tool with minimal annotation detail, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence, which is efficient. However, it is a near-restatement of the tool name and title, providing little additional value beyond what the structured metadata already conveys.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 two required parameters and no output schema, and the description omits important context such as whether the guidance is appended or replaces existing guidance, whether a clarity process must already exist, or what the response/result indicates. The description is minimally adequate for basic invocation but incomplete for confident use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents both parameters and their types. The description adds the phrase 'automation guidance message', slightly clarifying the content field's purpose, but does not add meaning beyond the schema's own descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Create') and resource ('automation guidance message for a clarity process'), making the basic action clear. However, it does not distinguish itself from sibling create_* tools or from updateClarityGuidance, and the term 'clarity process' is domain-specific without elaboration.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus updateClarityGuidance or other createClarity* tools. The context of a clarity process and automation guidance is implied by the name and schema, but there is no explicit usage context, prerequisites, or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createClarityImageUploadUrlCreate Clarity Image Upload UrlAInspect
Create a signed URL for uploading a PNG, JPEG, or WebP image directly to GCS
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The clarity process ID | |
| fileName | Yes | Name of the image file | |
| contentType | Yes | MIME type of the image | |
| extraCaptureRequestId | No | Extra-capture-request id to bind this capture to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide only negative hints, so the description carries the behavioral burden. It discloses that the tool only creates a signed URL rather than performing the upload, and that uploads happen directly to GCS. This is meaningful beyond the structured fields, though it does not mention expiration or follow-up completion steps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence provides the essential action, target, and constraints with no filler. Every word contributes to understanding what the tool does.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 complete schema coverage, the description sufficiently conveys the outcome: a signed URL for direct image upload. It does not specify response shape or follow-up behavior, but the tool's purpose is clear enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All parameters are fully described in the schema, including the contentType enum and UUID formats. The description adds no extra parameter-level meaning, 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 names a specific action (create a signed URL), a specific target (GCS), and supported formats (PNG, JPEG, WebP). This clearly distinguishes it from sibling tools like createClarityDocumentUploadUrl or completeClarityImageUpload.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the usage context clear: use this when an image needs to be uploaded directly to GCS via a signed URL. It does not explicitly name alternatives or exclusion conditions, but the format and storage constraints imply the right scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createClarityInviteLinkCreate Clarity Invite LinkAInspect
Create or regenerate a process-scoped Clarity interview invite link. Only the process creator or team managers can create invite links; creating a new link invalidates any prior active link for the process.
| Name | Required | Description | Default |
|---|---|---|---|
| process_id | Yes | The clarity process id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a mutating, non-idempotent operation. The description adds valuable behavioral detail by stating the authorization requirement and the side effect that 'creating a new link invalidates any prior active link for the process,' which an agent would not otherwise know.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. It front-loads the primary purpose and immediately follows with the permission and side-effect information needed for correct use.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with no output schema, the description covers the purpose, the authorization prerequisite, and the important invalidation side effect. Nothing needed to invoke 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 coverage is 100%, and the single parameter already has its own description ('The clarity process id'). The tool description adds no further parameter-level detail, 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 'Create or regenerate a process-scoped Clarity interview invite link', naming a specific verb and resource. The phrase 'interview invite link' distinguishes it from sibling link-creation tools such as createClarityProcessLink and createTeamInviteLink.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 specifying the permission boundary: 'Only the process creator or team managers can create invite links.' It also explains the regenerate behavior, but it does not explicitly name an alternative tool or state when to prefer this one over a sibling such as createClarityProcessLink.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createClarityLandscapeNodeCreate Clarity Landscape NodeBInspect
Create an area folder in the process tree. An active area (the default) requires organization admin+; a "proposal" area may be added by any organization member.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| orgId | Yes | ||
| parentId | No | ||
| ownerLabel | No | ||
| description | No | One or two sentences saying what family of work this area groups. Persisted as the area's summary. | |
| creationMode | No | Use "proposal" to add an area for review instead of asserting it exists. A proposal is idempotent: an equivalent live area under the same parent is returned untouched rather than duplicated. Defaults to "active" — except in a landscape-onboarding chat, which may only propose, and so defaults to "proposal". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful context beyond the sparse annotations by disclosing that active areas require organization admin+ while proposals are open to any member. However, it does not disclose side effects, return behavior, or the idempotency nuance described in the creationMode 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 a single, front-loaded sentence with no filler. It packs the core purpose and key permission distinction into minimal space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With six parameters, no output schema, and weak annotations, the description is too thin to be complete. It lacks guidance on parent/owner fields, sibling alternatives, and what the tool returns or how creation is confirmed.
Complex tools with many parameters or behaviors need more documentation. 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 partially compensates for the low 33% schema coverage by explaining the creationMode distinction and its permission implications. However, it adds no meaning for parentId or ownerLabel, and name/orgId remain only schema-defined, so the description does not fully carry the parameter-semantics burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Create'), resource ('area folder'), and location ('in the process tree'), which distinguishes it from sibling tools like createClarityFolder or createClarityProcessNode. It does not explicitly name a sibling, so it stops short of the clearest possible differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a permission-based distinction between 'active' and 'proposal' areas but does not explain when to prefer this tool over alternatives such as createClarityFolder or updateClarityLandscapeNode. No explicit when-to-use or when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createClarityOrganizationDocumentUploadUrlCreate Clarity Organization Document Upload UrlAInspect
Create a signed URL for uploading a PDF, TXT, Markdown, or BPMN document as an organization-level Clarity capture
| Name | Required | Description | Default |
|---|---|---|---|
| orgId | Yes | ||
| fileName | Yes | Name of the document file | |
| contentType | Yes | MIME type of the document |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the mutation-but-non-destructive nature is covered. The description adds the signed-URL semantics and upload-oriented behavior, but does not disclose details like URL expiration, single-use behavior, or the follow-up completion step.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every word contributes to identifying the action, scope, and file types without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 3-parameter URL creation tool with no output schema, the description is largely sufficient: it names the resource, scope, file types, and the upload purpose. It does not explicitly point to the paired completeClarityOrganizationDocumentUpload step or response shape, but 'signed URL' communicates the key output clearly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67%, with orgId lacking a description, but the description adds meaningful semantic mapping: PDF/TXT/Markdown/BPMN maps to the contentType enum and 'organization-level' clarifies the role of orgId. This goes beyond what the raw schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Create'), a concrete resource ('signed URL'), and explicit scope ('organization-level Clarity capture'). It also enumerates supported file types, making it easy to distinguish from sibling tools like createClarityTeamDocumentUploadUrl and createClarityDocumentUploadUrl.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 'organization-level' phrasing provides clear context about when this tool applies, distinguishing it from team- or artifact-scoped upload URL tools. However, it does not explicitly name alternatives or state when not to use it, leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createClarityProcessCreate Clarity ProcessAInspect
Create a new Clarity v2 process for the current team (Builder+). Optional name defaults server-side when omitted. Response uses camelCase createdAt to match existing FE clients.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Optional process name; server default applies when omitted | |
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations only declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=false. The description adds useful behavior beyond those: optional name defaults server-side, and the response uses camelCase createdAt for existing FE clients. However, it does not disclose potential side effects, error behavior, or what else the response contains, so the added transparency is modest.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The first sentence front-loads the core action and scope, and the second covers the only server-side default plus a response-format note. Every sentence contributes actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a create tool with two optional parameters and no output schema, the description covers the basic purpose, team scope, name default, and one response-format detail. However, the full return payload is only hinted at via 'createdAt', and failure conditions such as team mismatch are only present in the schema. It is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents both parameters thoroughly, including the team_id pinned-team fallback and OAuth behavior. The description only repeats the name defaulting and omits team_id entirely, so it adds no meaningful parameter 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 states a specific action and resource: 'Create a new Clarity v2 process for the current team (Builder+)'. This unambiguously distinguishes the tool from sibling tools like duplicateClarityProcess, createClarityProcessLabel, and createClarityProcessNode. The 'v2' and 'current team (Builder+)' qualifiers add useful precision.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the primary use case (creating a new Clarity process) and notes the team scope, but it does not explicitly compare against alternatives like updateClarityProcess or duplicateClarityProcess, nor does it state when not to use this tool. The context is clear enough to infer usage, but no direct routing guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createClarityProcessLabelCreate Clarity Process LabelCInspect
Create process tags for an organization.
| Name | Required | Description | Default |
|---|---|---|---|
| orgId | Yes | ||
| value | Yes | ||
| colorHue | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a non-read-only write operation, and the description adds little beyond that. It does not disclose side effects, permissions, uniqueness behavior, default colorHue application, or whether the operation is idempotent despite the idempotentHint being 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 single sentence is front-loaded and contains no filler. Every word adds meaning: the action, the resource type, and the organizational scope are all present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has three parameters, no output schema, and minimal annotations, so the description carries a heavy burden. It fails to mention what the tool returns, how colorHue is used, what happens on duplicate values, or any prerequisites, leaving an agent under-equipped to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it only loosely maps 'organization' to orgId and 'tags' to value. colorHue is completely absent from the description, and no parameter-level constraints or defaults are explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Create'), a clear resource ('process tags' / Clarity Process Label), and a scope ('for an organization'). This distinguishes it from related tools like assignClarityProcessLabels, updateClarityProcessLabel, and deleteClarityProcessLabel, though it doesn't explicitly name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives such as listAvailableClarityProcessLabels, assignClarityProcessLabels, or updateClarityProcessLabel. The description only implies creation, but doesn't address reuse, duplication, or relationship to process-process label assignment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createClarityProcessLinkCreate Clarity Process LinkAInspect
Create a process-to-process link in the organization's Clarity landscape when the caller can manage both endpoint teams. If the same live source, target, and type already exists, the existing link is returned.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Relationship type between the source process node and target process node | |
| orgId | Yes | ||
| state | No | Whether the link is suggested by Duvo or confirmed by a user | confirmed |
| confidence | No | Optional confidence score from 0 to 1 | |
| source_node_id | Yes | Hierarchy node id for the source process | |
| target_node_id | Yes | Hierarchy node id for the target process |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a write operation (readOnlyHint=false) and not fully idempotent. The description adds useful behavioral context beyond those hints: the caller permission requirement and the duplicate-handling behavior that returns the existing link. There is no contradiction with the annotations because the idempotentHint=false refers to the general operation, while the description narrows idempotency to the case of an existing live source, target, and type.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The action and permission condition are front-loaded, and the second sentence provides a valuable edge-case behavior. Every sentence contributes useful information for tool selection and invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For the tool's complexity, the description covers the core purpose, the critical permission prerequisite, and the duplicate-link behavior. Required parameters and their types are already in the schema. The description could be slightly more explicit about the meaning of 'live' and what happens when the caller lacks management rights, but these are minor gaps given schema coverage and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high (83%), so the schema already documents most parameters. The description reinforces the importance of source, target, and type in the duplicate-check condition, but it does not add meaning beyond the schema for parameters like state, confidence, or orgId. This meets the baseline for good schema coverage without adding extra parameter-level detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action ('Create a process-to-process link') on a specific resource ('the organization's Clarity landscape'). It distinguishes this tool from siblings like createClarityProcessNode and createClarityProcessLabel by specifying that the link connects two process nodes, and it adds the uniqueness behavior for existing links.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit usage condition: the caller must be able to manage both endpoint teams. It also explains the behavior when the same source, target, and type already exist, which tells the agent that this tool is safe to call in that scenario. However, it does not explicitly name an alternative tool such as updateClarityProcessLink or state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createClarityProcessNodeCreate Clarity Process NodeAInspect
File an existing Clarity process into an area of the process landscape (team manager or organization admin+). Use this for a process that already exists but sits in Unsorted; use proposeClarityLandscapeProcess to create a brand-new one.
| Name | Required | Description | Default |
|---|---|---|---|
| orgId | Yes | ||
| parentId | Yes | The area folder the process is filed under. | |
| processId | Yes | An existing Clarity process to file into the landscape. Unsorted processes are listed as `unlinkedProcesses` by getClarityProcessLandscape. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful behavioral context beyond the annotations by specifying required permission (team manager or organization admin+) and clarifying the operation is about relocating an existing process into the landscape. It does not explicitly describe side effects on the Unsorted folder, but the wording implies filing/moving, and the annotations indicate a non-read-only, non-destructive mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the primary action and immediately followed by the alternative-tool routing. There is no filler or redundant restating of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 3-parameter mutation tool, the description gives the action, the target context, permission requirements, and the key sibling distinction. It does not explain error cases or the exact return value, but those are not critical for an agent selecting and invoking this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents parentId and processId well, and the description reinforces the processId semantics by tying it to processes in Unsorted. However, the description does not add much meaning for orgId, and schema coverage is only 67%, so the description only partially compensates for the gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: file an existing Clarity process into an area of the process landscape. It also distinguishes this tool from proposeClarityLandscapeProcess, which creates a brand-new process, making the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly gives the when-to-use condition: when the process already exists but sits in Unsorted. It also names the alternative tool for the opposing case. This is strong routing guidance for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createClarityTeamDocumentUploadUrlCreate Clarity Team Document Upload UrlAInspect
Create a signed URL for uploading a PDF, TXT, Markdown, or BPMN document as a team-level Clarity capture
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| fileName | Yes | Name of the document file | |
| contentType | Yes | MIME type of the document |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context beyond the sparse annotations by clarifying that it creates a signed URL rather than performing the upload itself, and by listing allowed content types. However, it does not disclose URL expiration, side effects, or the need to follow up with completeClarityTeamDocumentUpload, which is significant since readOnlyHint=false indicates a potentially state-changing operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence states the action, resource, supported formats, and scope with no redundant wording. It avoids repeating the title or parameter details while still conveying the core semantics.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity tool with full schema parameter coverage and clear file-type constraints, the description is nearly complete: it tells the agent what operation is performed and which document types qualify. It is slightly incomplete because there is no output schema and the description does not mention the upload-completion workflow or the shape of the returned signed URL.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema already provides a detailed team_id description covering API-key fallback and OAuth behavior. The description's file-type list aligns with the contentType enum but does not add significant meaning beyond the schema; the mapping from 'BPMN' to application/xml is only implicit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific action ('Create a signed URL'), a concrete resource ('team-level Clarity capture'), and lists the supported document types (PDF, TXT, Markdown, BPMN). This clearly distinguishes it from org-level or general document upload URL tools based on the team-level 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 appropriate context by specifying 'team-level,' and the schema's team_id description gives useful auth guidance (omit for API keys, pass for OAuth callers). However, it does not explicitly name sibling alternatives such as createClarityDocumentUploadUrl or createClarityOrganizationDocumentUploadUrl, nor does it state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createClarityVideoUploadUrlCreate Clarity Video Upload UrlAInspect
Create a signed URL for uploading a video file directly to GCS
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The clarity process ID | |
| fileName | Yes | Name of the video file | |
| contentType | Yes | MIME type of the video | |
| extraCaptureRequestId | No | Extra-capture-request id to bind this capture to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations only provide generic flags (readOnlyHint=false, destructiveHint=false) and do not explain the operation's nature. The description adds meaningful behavioral context: the tool does not upload the video itself but returns a signed URL, and the upload is performed directly to GCS. This helps the agent understand the expected flow, though expiration or lifecycle details are not disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that states the core purpose and the key storage destination ('directly to GCS'). There is no filler, repetition, or unnecessary detail, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple four-parameter tool with no nested objects, the schema fully documents inputs and the description explains the output concept ('signed URL') and the storage target. The main missing piece is explicit guidance on the follow-up completion flow, but the description is complete enough 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?
Schema description coverage is 100%, with all four parameters already documented meaningfully in the schema (id, fileName, contentType, extraCaptureRequestId). The description does not add parameter-specific detail beyond referring to 'uploading a video file', which the schema already captures. A baseline score of 3 is appropriate because the schema carries the parameter documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Create'), a specific resource ('a signed URL'), and a specific context ('uploading a video file directly to GCS'). This clearly distinguishes it from sibling upload-URL tools like createClarityImageUploadUrl, createClarityDocumentUploadUrl, and createFileUploadUrl without requiring the agent to inspect schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the usage context: this is the URL-generation step before a video is uploaded directly to GCS, and the sibling completeClarityVideoUpload suggests a follow-up step. However, it does not explicitly say when to choose this over other upload-URL tools or mention the completion step, so the usage guidance remains implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createConnectionCreate ConnectionBInspect
Create a new user-provided connection (custom MCP server) for the current team. OAuth-based integrations (native) require an interactive browser flow — start them with the dedicated OAuth endpoints (/v2/teams/:team_id/connections/oauth/native/:provider/start or /v2/teams/:team_id/connections/oauth/mcp/start) instead of calling this endpoint directly.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| type | No | custom_mcp | |
| headers | No | ||
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| provider | Yes | ||
| server_url | No | ||
| auth_method | Yes | ||
| custom_integration_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a non-read-only, non-idempotent mutation. The description adds useful context that the tool creates a custom MCP connection and that OAuth flows need different endpoints. It does not disclose side effects, failure behavior, or what happens when auth_method is set to oauth, but with annotations present this is a moderate level of transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with the core purpose front-loaded. The caveat about OAuth flows is placed immediately after the main statement, and the explicit endpoint paths add practical value without excessive verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 8 parameters, a nested headers object, an auth_method enum that includes oauth, and no output schema, the description is not complete enough. It leaves unclear how auth_method interacts with the warning about OAuth flows, what server_url and headers mean for a custom MCP server, and what response or validation behavior to expect. The tool needs more behavioral and parameter context to be safely invoked.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 13%, and the description provides almost no parameter-level guidance. It does not explain name, server_url, headers, auth_method, or custom_integration_id beyond what the bare schema types and enum imply. The team_id parameter is well described in the schema, but most required and optional parameters remain semantically opaque.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb-resource pair: "Create a new user-provided connection (custom MCP server) for the current team." It names the resource type, the scope (team), and clarifies that this is specifically for custom MCP servers. It also explicitly contrasts with OAuth-based integrations, though it doesn't differentiate from closely named siblings like createCustomIntegration or createCredential.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 tells agents when NOT to use this tool: OAuth-based integrations with an interactive browser flow should use the dedicated OAuth endpoints instead, and it names those endpoints. However, it doesn't provide guidance for choosing between this and other connection-related siblings such as createCredential, createCustomIntegration, or probeMcpServer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createCredentialCreate credentialAInspect
Create a login. At least one of password or otp_secret must be provided. Personal by default; pass shared: true to create a team-shared login (requires lead builder role).
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | ||
| shared | No | ||
| userId | Yes | ||
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| password | No | ||
| username | No | ||
| otp_secret | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only establish that this is a mutating, non-idempotent operation. The description adds useful behavioral context: personal-by-default sharing behavior, the lead-builder role gate for shared logins, and the at-least-one validation constraint. These details go beyond what annotations alone reveal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences front-load the purpose, then state the required combination constraint and the shared-mode behavior/role requirement. Every sentence earns its place with no 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?
The definition is minimally sufficient for a basic personal credential: required fields are visible in the schema, the validation rule is explicit, and the shared path is explained. However, with no output schema and no description of what userId/domain represent, the agent must infer important invocation details rather than being told them.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 14%, so the description must carry param semantics. It explains shared, password, and otp_secret meaningfully, but leaves the required userId and domain parameters unexplained, and also doesn't clarify username. This is a partial compensation for a 7-parameter 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 action and resource ('Create a login') and clarifies that a credential is a login rather than a generic secret or connection. It doesn't explicitly name a sibling alternative, but the resource type is specific enough to distinguish it from tools like createSecret or updateCredential.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 parameter-level guidance: at least one of password or otp_secret is required, and shared: true is the switch for team-shared logins with a role requirement. However, it doesn't say when to prefer this tool over related alternatives like updateCredential or createSecret, so the tool-selection guidance is mostly implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createCustomIntegrationCreate Custom IntegrationAInspect
Create a custom integration type (team-level catalog entry) that users can then connect as user-provided MCP connections. Requires manager-or-above role.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| server_url | Yes | ||
| auth_method | Yes | ||
| oauth_client_id | No | ||
| oauth_client_secret | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal readOnly=false, idempotent=false, and destructive=false, so the write behavior is known. The description adds valuable behavioral context beyond annotations: the created entity is a team-level catalog entry, the operation requires manager-or-above permissions, and users will later connect it as an MCP connection. This is meaningful for an agent deciding whether to call 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 a single, dense sentence with no filler or repetition. The verb and resource are front-loaded, and the role requirement is appended without bloating the text. Every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is sufficient to understand the high-level purpose and permission requirement, but it does not cover parameter dependencies such as when oauth_client_id and oauth_client_secret are needed, nor does it clarify the server_url/auth_method semantics. With no output schema and only 17% schema description coverage, the definition is minimally viable but has clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 17%, with team_id carrying the sole description. The tool description does not explain server_url, auth_method, oauth_client_id, oauth_client_secret, or how they relate to each other. Since the schema leaves most parameters undescribed, the description needed to compensate but 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 states a specific action ('Create'), a specific resource ('custom integration type'), and adds a clarifying parenthetical ('team-level catalog entry') that distinguishes it from a concrete connection. The follow-up clause about users connecting them as user-provided MCP connections makes the tool's purpose unmistakable and separates it from sibling tools like createConnection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: this creates a reusable catalog entry rather than an actual connection, and it requires a manager-or-above role. It does not explicitly name alternatives or say 'when not to use', but the catalog-vs-connection framing provides enough guidance for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createEvalRubricCreate Eval RubricAInspect
Add one Agent-specific evaluation rubric to a build. A build may hold at most 5 custom rubrics; this fails with 409 once that ceiling is reached. Defaults to the Agent's live build; pass build_id to target a specific revision.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Short, human-readable Pass/Fail rubric title. | |
| agentId | Yes | The agent's unique identifier (Assignment ID) | |
| build_id | No | Add the rubric to this build (revision). Defaults to the agent's live build when omitted. | |
| description | Yes | A 1-2 sentence Pass condition phrased as a question. | |
| selected_automation_revision_id | No | The automation revision this edit is being made at. Pass a draft and the edit is folded into that draft itself; pass the active revision and the edit lands on a draft branched from it. A historic revision is rejected — it cannot be activated from without an explicit rebase. A revision belonging to a different automation is ignored, and the edit targets the automation the addressed agent belongs to. Omit to target the automation's active revision. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond the annotations: the 5-custom-rubric ceiling, the 409 failure mode, and the default live-build behavior. It does not contradict annotations, which already signal a non-read-only write; the more nuanced selected_automation_revision_id behavior is left to the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences front-load the core action, then state the most important constraint (5-rubric ceiling with 409) and the default targeting behavior. There is no filler, repetition, or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter write tool with no output schema, the description covers the key failure mode and default target behavior, which is solid. It does not mention the success return value or summarize selected_automation_revision_id's draft/active/historic branching, but that parameter's behavior is fully documented in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 even with no parameter enrichment in the description. The description does add default-build semantics for build_id, but this largely restates the schema. It does not meaningfully enrich title, agentId, description, or selected_automation_revision_id beyond what the schema already says.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the specific verb and resource: 'Add one Agent-specific evaluation rubric to a build.' It distinguishes this tool from sibling queue-level rubric tools like createCaseQueueEvalRubric, and from replace/delete/update rubric tools, by specifying the Agent-specific build 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 provides clear invocation context: it defaults to the Agent's live build and says to pass build_id to target a specific revision. It does not explicitly name alternatives or state when not to use this tool, but the Agent-specific build framing implies the intended situation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createFileUploadUrlCreate File Upload UrlBInspect
Generate a signed URL for uploading a file directly to GCS.
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| fileName | Yes | Name of the file to upload | |
| contentType | Yes | MIME type of the file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds some behavioral context beyond the annotations by indicating that this generates a signed URL for direct GCS upload, implying the actual file transfer happens client-side. However, it does not disclose URL expiry, required permissions, or what happens after generation. Annotations are not contradicted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. 'Generate a signed URL' appears first, followed by the purpose qualifier 'for uploading a file directly to GCS,' and every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple and the schema fully documents all parameters, so the description is mostly adequate for invoking it. However, the large sibling set creates ambiguity about when this generic upload URL tool should be chosen over domain-specific ones, and the absence of an output schema leaves return-value details unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters fileName, contentType, and team_id are already fully documented in structured form. The description contributes no additional parameter-level meaning beyond referring to 'a file.'
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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: generate a signed URL for uploading a file directly to GCS. It is clear about what the tool does, though it does not distinguish itself from the many sibling create*UploadUrl tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives like createCaseAttachmentUploadUrl, createClarityDocumentUploadUrl, or createSandboxUploadUrl. The description gives context but no explicit or implicit selection criteria beyond 'file directly to GCS.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createOrgTeamCreate Org TeamAInspect
Create a new team under an organization you administer. Requires an organization Admin, Executive, or Owner role.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| orgId | Yes | Organization ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a non-read-only, non-idempotent, non-destructive mutation, and the description adds the authorization requirement (Admin/Executive/Owner) plus the constraint that the organization must be one the caller administers. This goes beyond what the schema or annotations say, and there is no contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: the action is stated first, and the required role is stated second. Every sentence carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter create operation with no nested objects or output schema, this covers action, target scope, and authorization adequately. It does not describe duplicate-name behavior or return value, but those are minor at this complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only orgId has a schema description; name has just type and minLength. The description maps both parameters implicitly—name is the new team's name and orgId is the target organization—but it does not explain naming constraints or uniqueness behavior, so compensation is partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with the verb 'Create' and a specific resource, 'a new team under an organization,' which is exactly what the tool does. It also narrows scope to organizations the caller administers, which distinguishes it from generic team/invite-related siblings like createTeamInvite and inviteOrgMember.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 precondition: only organization Admins, Executives, or Owners should call this. It does not name an alternative tool for other roles or for listing teams, but the resource and role context 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.
createPulseDashboardCreate Pulse DashboardAInspect
Create a new Duvo Pulse dashboard from a natural-language prompt (e.g. 'open cases by queue this week') and dispatch the first generation turn. Generation is asynchronous — poll GET /artifacts/{artifactId} until status is completed. The dashboard is private to you unless you set visibility to 'team', which shares it with your whole team straight away — with permission 'view' (teammates see the dashboard) or 'edit' (teammates can also iterate on it).
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | ||
| permission | No | ||
| visibility | No | ||
| connection_ids | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations establish that this is a non-read-only, non-idempotent create operation, and the description adds valuable behavior beyond that: generation is asynchronous, requires polling GET /artifacts/{artifactId}, and visibility/permission defaults to private unless team sharing is chosen. 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?
Three sentences, each earning its place: the core create action, the async polling behavior, and the privacy/permission model. The most important information is front-loaded and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a create operation with no output schema, the description covers the core task, async generation, polling endpoint, and team-sharing semantics. It is slightly incomplete because it does not explicitly state what the initial response contains (e.g. artifactId) or what connection_ids does, but these are inferable or optional.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must explain the parameters, and it does explain message via the natural-language-prompt example, plus visibility and permission semantics. However, it never mentions connection_ids, leaving the agent to guess its role 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 a specific action ('Create a new Duvo Pulse dashboard'), specifies the input mode ('from a natural-language prompt'), and states the follow-up behavior ('dispatch the first generation turn'). This clearly distinguishes it from sibling tools like sendPulseDashboardMessage or answerPulseDashboardQuestion, which operate on an existing dashboard.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 — when a new dashboard is needed from a prompt — but never names an alternative or an exclusion. There is no explicit guidance such as 'use updatePulseDashboard for existing dashboards' or 'use sendPulseDashboardMessage to continue a conversation.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createPulseDashboardAttachmentUploadUrlCreate Pulse Dashboard Attachment Upload UrlAInspect
Issue a presigned upload URL for a file to attach to a Duvo Pulse dashboard message (e.g. an HTML dashboard to copy, or a screenshot to match). POST the file bytes to the returned upload_url as multipart form data under the field name 'file', then pass the returned attachment_id in the attachments array of POST /artifacts/{artifactId}/messages. The agent reads the file directly from its sandbox. Files live as long as the dashboard's sandbox (about 12 hours), so upload shortly before sending.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | Yes | Name of the file being attached, without any path segments | |
| mime_type | Yes | MIME type of the file, e.g. text/html or image/png | |
| artifactId | Yes | ||
| size_bytes | Yes | Size of the file in bytes (max 25MB) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already show readOnlyHint=false and idempotentHint=false, but the description adds meaningful behavioral context: the URL is presigned, the file is read directly from the agent's sandbox, and files expire with the dashboard's sandbox in about 12 hours. This goes beyond the structured annotation fields without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler: purpose, exact upload protocol, and lifetime warning. The critical usage constraint is front-loaded, and every sentence contributes actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, but the description explicitly names both returned values (upload_url and attachment_id) and explains how to use them. It also covers the file lifetime and sandbox context. For a 4-parameter upload tool, this is complete enough for an agent to call and act on the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75%, so the schema already documents filename, mime_type, and size_bytes. The description adds that artifactId is used in the messages path and that the multipart field must be named 'file', which is useful but does not deeply explain each parameter. 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: 'Issue a presigned upload URL for a file to attach to a Duvo Pulse dashboard message.' It also gives concrete examples (HTML dashboard, screenshot) and the tool name alone distinguishes it from sibling upload tools like createCaseAttachmentUploadUrl or createSandboxUploadUrl.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 a clear workflow: POST the file as multipart form data to the returned upload_url, then pass the attachment_id to POST /artifacts/{artifactId}/messages. It explicitly advises uploading shortly before sending due to the 12-hour lifetime. It does not explicitly compare against sibling upload-URL tools, but the intended context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createQueueCreate QueueCInspect
Create a new queue.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Queue name. A standalone queue must be uniquely named within the team. A queue created inside an automation instead has to be uniquely named within a revision, which is checked when that revision is activated. | |
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| folder_id | No | Optional folder to nest the queue under. | |
| description | No | Optional human-readable description. | |
| automation_id | No | Automation this queue belongs to. Optional for teams not yet migrated to Automations; required once a team has migrated. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate readOnlyHint=false, destructiveHint=false, and idempotentHint=false, so the agent knows this is a non-read-only operation. The description adds no additional behavioral detail about side effects, idempotency implications, permissions, or failure modes. It contributes nothing beyond the annotations already 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 a single sentence with no filler, and the core action 'Create a new queue' is front-loaded. It is appropriately concise, though it sacrifices useful context that would justify a perfect score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With five parameters, no output schema, and many queue-related sibling tools, a single generic sentence is insufficient for an agent to fully understand the operation's context, return value, or prerequisites. The schema fills in some gaps, but the description alone is inadequate for complete 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 input schema has 100% description coverage for all five parameters, including detailed notes on name uniqueness, team_id fallback behavior, and automation_id migration requirements. The description itself adds no parameter-level information, but the schema fully carries that burden, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Create a new queue' clearly identifies the action (create) and the target resource (queue), making it distinct from similar siblings like createQueueAggregation, createQueueLabel, and createQueueJsonSchema. It is direct and unambiguous, though it does not explain what a queue is or when it should be used.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as updateQueue, deleteQueue, or listQueues. It also omits important contextual conditions like the automation migration requirement mentioned in the automation_id parameter description. An agent receives no direction for choosing this tool correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createQueueAggregationCreate Queue AggregationBInspect
Create an immutable aggregation definition on a queue.
| Name | Required | Description | Default |
|---|---|---|---|
| queue_id | Yes | The queue's unique identifier | |
| definition | Yes | ||
| maximum_stale_age_seconds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The word 'immutable' adds useful behavioral context beyond the annotations, signaling that a created aggregation definition cannot later be modified in-place. However, the description does not mention side effects, permissions, what happens if the queue does not exist, or whether creation replaces any existing definition.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler or repetition. It is appropriately concise for stating the core action, though it sacrifices useful detail that would require a second sentence, so it is not quite excellent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a highly complex nested input schema and no output schema, one short sentence is insufficient. Missing context includes parameter semantics, lifecycle implications of immutability, relationship to evaluateQueueAggregation/refreshQueueAggregation, and what a successful response looks like.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33%, so the description needed to compensate for the undocumented parameters, but it does not. It only says 'aggregation definition on a queue' and never explains maximum_stale_age_seconds or the meaning/structure of the definition object's measures, dimensions, filters, or timeDimension.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action ('Create') and a specific resource: an immutable aggregation definition on a queue. It is concise and distinguishable from sibling tools such as listQueueAggregations, evaluateQueueAggregation, and refreshQueueAggregation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 creating a new aggregation definition, but it does not explicitly state when to use it versus related tools like evaluateQueueAggregation or refreshQueueAggregation. No exclusions, prerequisites, or alternative routing guidance are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createQueueJsonSchemaCreate Queue Json SchemaAInspect
Declare a queue's first Case schema by hand, so a person can type a queue up front instead of waiting for its producing agent to declare the shape. Fails if the queue already has a schema — replace an existing one with PUT.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| schema | Yes | ||
| queue_id | Yes | The queue's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already signal a non-read-only, non-idempotent write, and the description adds a concrete failure mode: it fails if the queue already has a schema. It also clarifies that the schema is manually declared rather than agent-generated, adding useful context 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 no filler. The core purpose is front-loaded, and the failure condition plus replacement guidance follow naturally. 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 three-parameter create tool with no output schema, the description covers purpose, failure behavior, and replacement routing well. However, the meaning of name and the concrete shape of the schema payload remain underspecified, so it is not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only queue_id is described in the schema, so the description must compensate. It adds meaning by explaining that schema is a hand-declared Case schema and that it must be the first one, but it does not explain the name parameter or the expected structure of the schema object. Partial compensation, not full.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific action ('Declare a queue's first Case schema by hand'), the exact resource, and the constraint that it is the first schema. It also distinguishes itself from replacement/update siblings by noting the 'first' aspect and the PUT replacement path.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when to use the tool (manual up-front schema declaration before the producing agent declares the shape) and when not to use it (if the queue already has a schema), pointing to replacement via PUT. This gives an agent clear routing guidance among the queue-schema siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createQueueLabelCreate Queue LabelBInspect
Create a label on a queue without assigning it to a case.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | ||
| value | Yes | ||
| queue_id | Yes | The queue's unique identifier | |
| color_hue | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a write operation that is non-idempotent and non-destructive. The description adds the useful distinction that the label is not assigned to a case, but it does not disclose behavior like duplicate handling, idempotency implications, or required permissions. 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 efficient sentence with no wasted words. It front-loads the action and resource, though it is somewhat terse given the tool's parameter 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?
For a tool with four parameters, low schema coverage, and no output schema, the description is too thin. It omits parameter semantics, return behavior, and any operational context, leaving the agent to infer too much.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25%, with queue_id documented. The description loosely implies queue_id and value (label text) but does not explain key or color_hue at all. With low schema coverage, the description was expected to compensate, and it largely 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 uses a specific verb and resource: 'Create a label on a queue' and explicitly distinguishes it from case-level labeling. This clearly differentiates it from siblings like assignCaseLabels and aligns with the title.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'without assigning it to a case' gives a partial routing signal, implying this is for queue-level labels rather than case labels. However, it does not explicitly name alternatives such as assignCaseLabels, updateQueueLabel, or listQueueLabels, nor state when to prefer this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createRevisionCreate RevisionAInspect
Create a new revision for an existing agent.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Build name | |
| config | No | Build configuration. An agent step takes the latest agent schema (legacy v1 agent configs are not accepted); a code step takes a code-step config. Omit it to get the step family's default first build. | |
| agent_id | Yes | The agent's unique identifier | |
| handover_to | No | The single agent or code step to run after this one completes ("Handover to"). Mutually exclusive with handover_target_ids. | |
| source_build_id | No | Build ID to copy integrations and queue links from | |
| handover_target_ids | No | Agent IDs that this agent can hand work off to | |
| selected_automation_revision_id | No | The automation revision this edit is being made at. Pass a draft and the edit is folded into that draft itself; pass the active revision and the edit lands on a draft branched from it. A historic revision is rejected — it cannot be activated from without an explicit rebase. A revision belonging to a different automation is ignored, and the edit targets the automation the addressed agent belongs to. Omit to target the automation's active revision. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, indicating mutation, and the description's 'create' confirms this is a write operation without contradiction. The description adds little behavioral context beyond the annotation: it doesn't mention whether this creates a draft or activates a revision, which is a meaningful behavioral trait given the selected_automation_revision_id parameter suggests draft/active branching behavior. This is useful additional context that could help the agent understand side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that is efficient and front-loads the core action ('Create') followed by the resource and target. It's appropriately concise for a tool whose heavy lifting is in its schema. While it doesn't add much value, what's there is clean and non-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?
The description is short, but the schema is very rich — all 7 parameters have descriptions covering 100% of the parameter space, including nuanced semantics like the config version discriminator, handover mutual exclusivity, and draft-vs-active revision behavior. There's no output schema, but for a create operation the return value is predictable. The one gap is that the description doesn't explain what a 'revision' is in this system's model, which an agent selecting between createAgent, createRevision, and updateRevision might need.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for all 7 parameters, so the baseline is 3. The description doesn't add anything beyond the schema for parameter semantics — for example, it doesn't explain the community between config's two variants (agent vs code step), which would be genuinely additive. The schema already documents each parameter in detail, so the description's silence on parameters is acceptable but not helpful.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Create a new revision for an existing agent' states a specific verb (create), resource (revision), and target (existing agent). It distinguishes the action from createAgent (creating the agent itself) and from createSkillRevision (creating a skill revision), though it doesn't explicitly name those siblings. It's clear about what it does, but the distinction from updateRevision could be sharper since both operate on 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 clearly implies this is the tool to use when a new revision of an existing agent is needed, rather than creating an agent or updating an existing revision. The 'existing agent' phrasing gives context that the agent must already exist. However, it doesn't explicitly state when NOT to use this tool or name alternatives like updateRevision or createAgent, leaving some inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createSandboxCreate SandboxAInspect
Create a new sandbox for file uploads. The returned sandbox_id can be passed to POST /v2/teams/:team_id/runs to stage data for a run.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is not read-only, not idempotent, and not destructive. The description adds the useful downstream behavior that the returned sandbox_id is passed to a run endpoint, but it does not disclose other behavioral traits such as cleanup, persistence, or authorization requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The primary purpose is stated first, followed by the actionable downstream usage. Every sentence contributes meaningful 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 zero-parameter creation tool with no output schema, the description is complete: it names the resource, states what is returned (sandbox_id), and explains how to use it. An agent has enough information to call the tool and understand its role in the broader workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema coverage is 100%, so there is no parameter ambiguity. The description appropriately focuses on what the tool returns and how that return value is used.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 and resource: 'Create a new sandbox for file uploads.' It also explains the sandbox's role in staging data for a run, which distinguishes it from sibling tools like createSandboxUploadUrl or uploadSandboxFile.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 the tool: when a sandbox is needed for file uploads before staging data for a run. It does not explicitly mention alternatives or when-not-to-use, but the downstream use case is specific enough to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createSandboxUploadUrlCreate Sandbox Upload UrlAInspect
Get a presigned URL for uploading a file into a sandbox. Use for files larger than 10MB; smaller files can be uploaded directly via POST /v2/sandboxes/:sandbox_id/files.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path where the file will be uploaded (e.g. /workspace/data.csv) | |
| sandbox_id | Yes | The sandbox's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide the safety profile (not read-only, not idempotent, not destructive), so the bar for additional disclosure is lower. The description adds the presigned-URL mechanism and the size threshold as useful behavioral context. However, it does not disclose URL expiration, whether the sandbox must already exist, or side effects of generating the URL. With annotations present, the added value is moderate but not rich — a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste. The core function is front-loaded in the first sentence, and the second sentence earns its place by providing the routing decision. Every word contributes either to what the tool does or when to use it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 2-param tool with fully documented schema and clear annotations, the description covers the essential calling decision: what it returns (a presigned URL), when to use it (files > 10MB), and its sandbox scope. Minor gaps remain: no output schema means the exact response shape is unspecified, and it doesn't explicitly differentiate from the generic createFileUploadUrl sibling — though the sandbox scoping largely handles that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — both sandbox_id and path are already documented in the schema with meaningful descriptions. The tool description reinforces the upload context via the 10MB threshold, but adds no parameter-level syntax or format detail beyond the schema. Per calibration, baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get a presigned URL for uploading a file into a sandbox.' The sandbox scoping and the presigned-URL mechanism clearly distinguish it from siblings like uploadSandboxFile (which performs the upload) and createFileUploadUrl (generic, non-sandbox URL). An agent can tell this tool apart from its nearest alternatives without opening their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly names the decision rule for this tool: 'Use for files larger than 10MB; smaller files can be uploaded directly via POST /v2/sandboxes/:sandbox_id/files.' This is model usage guidance — it states when to use this tool, when not to, and provides the exact alternative endpoint. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createScheduleCreate ScheduleCInspect
Create a schedule for an agent. The schedule fires against the agent's live build. The authenticated user owns the schedule.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | ||
| cron | No | ||
| time | No | ||
| enabled | Yes | ||
| agent_id | Yes | The agent's unique identifier | |
| timezone | Yes | ||
| frequency | Yes | ||
| recurring | No | ||
| day_of_month | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the schedule fires against the agent's live build, providing some behavioral insight. However, it does not mention side effects such as overwriting existing schedules, whether the action is idempotent (though annotations indicate idempotentHint=false), or what the response contains. Since annotations provide no additional hints (e.g., readOnlyHint, destructiveHint), the description carries the burden but only partially fulfills it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the primary purpose. It avoids unnecessary words and is well-structured, making it easy to parse and understand quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 9 parameters (4 required) and no output schema, the description is severely incomplete. It does not explain scheduling semantics, how parameters interact, or what the return value looks like. Users would need to consult external documentation or infer from parameter names, which is insufficient for a complete understanding.
Complex tools with many parameters or behaviors need more documentation. 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 explain any of the parameters beyond the schema's minimal coverage (only agent_id has a description). It does not clarify the meaning of frequency, day, cron, time, recurring, or day_of_month, leaving users to infer their roles. With schema description coverage at only 11%, the description adds no value to parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 'Create a schedule' and specifies the resource 'agent'. It adds context about the schedule firing against the agent's live build and ownership by the authenticated user, which helps differentiate it from other create tools like createAutomation. However, it does not explicitly list the schedule type or frequency options, leaving some ambiguity about the exact purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidance on when to use this tool versus alternatives such as updateSchedule, deleteSchedule, or createAutomation. It does not mention scenarios where scheduling is needed or when other tools might be more appropriate. The only contextual hint is that the schedule fires against the agent's live build, but this is not framed as a usage criterion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createSecretCreate SecretAInspect
Create an env-var secret. Personal by default; pass shared: true to create a team-shared secret (requires lead builder role).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| shared | No | ||
| values | Yes | ||
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| service_slug | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already signal non-readonly, non-idempotent, non-destructive behavior. The description adds useful context beyond annotations: the default personal scope and the role requirement for shared secrets. This helps the agent anticipate authorization behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with no filler. The core action is front-loaded, and the key parameter behavior (`shared: true` plus role requirement) is stated efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given five parameters, low schema coverage, and no output schema, the description covers the main creation flow but leaves `service_slug` unexplained. It also does not mention what the tool returns, although the absence of an output schema lowers that burden. Overall, it is adequate for the common case but not fully complete for all parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 20%, so the description must compensate. It does clarify the `shared` parameter semantics and default behavior, and "env-var secret" implies the shape of `values`. However, it says nothing about `service_slug`, which remains undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: "Create an env-var secret," which clearly identifies the operation and the object type. It also distinguishes personal vs. team-shared scope, helping the agent differentiate this from sibling tools like createCredential or updateSecret.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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: personal is the default, and team-shared requires both `shared: true` and the lead builder role. It does not explicitly enumerate when to avoid this tool in favor of siblings, but the create operation and env-var type make the primary use case clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createSkillCreate SkillAInspect
Create or update a skill from a JSON body. The server constructs SKILL.md from the provided fields and stores it. If a skill with the same name already exists in the team, it is updated.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Skill name. 1-64 lowercase alphanumeric chars and hyphens; no leading/trailing or consecutive hyphens. | |
| content | Yes | Markdown body of SKILL.md without YAML frontmatter. The server prepends the frontmatter from the other fields. | |
| license | No | Optional: license name or reference to a bundled license file. | |
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| metadata | No | Optional: arbitrary key-value metadata. | |
| description | Yes | 1-1024 chars describing what the skill does and when to invoke it. | |
| allowed-tools | No | Optional (experimental): space-delimited list of pre-approved tools. | |
| compatibility | No | Optional: 1-500 chars describing environment requirements. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the key non-obvious side-effect: if a skill with the same name already exists in the team, it is updated, which implies possible overwriting of existing content. It also clarifies that the server generates SKILL.md from the provided fields, adding behavioral context 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, front-loads the core action, and includes the important update behavior without filler. Every clause contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential create/update behavior and team-scoped name uniqueness, while the schema handles parameter documentation. However, with no output schema, the description does not say what the call returns, and it gives no indication of how this tool relates to the revision workflow represented by createSkillRevision and promoteSkillRevision.
Complex tools with many parameters or behaviors need more documentation. Simple 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 schema already documents name constraints, content behavior, team_id fallback rules, and optional fields. The description adds only the high-level 'JSON body' framing and SKILL.md construction, which is helpful but does not meaningfully expand parameter-level understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Create or update a skill') and adds concrete behavior: the server constructs SKILL.md and stores it. It is clear, but it does not explicitly differentiate the tool from closely related siblings like createSkillRevision or updateSkillRevision, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use guidance is provided, and the description never mentions alternatives such as createSkillRevision, updateSkillRevision, or updateSkillFile. The only usage hint is the conditional update-on-same-name behavior, which describes behavior rather than telling the agent when to select this tool over its siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createSkillRevisionCreate Skill RevisionAIdempotentInspect
Open a draft revision of a skill, copying its files from the active revision (or from source_revision_id). Edit the draft with updateSkillRevisionFile, then activate it with promoteSkillRevision — the previously active revision stays intact and can be re-activated later. A skill has at most one open draft: if one already exists this returns it with created: false.
| Name | Required | Description | Default |
|---|---|---|---|
| skill_id | Yes | Skill ID. | |
| source_revision_id | No | Revision to fork the new draft from. Defaults to the live revision (or the skill's current files if there is no live revision yet). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate an idempotent, non-destructive, read-write operation, and the description adds valuable context: files are copied from the active revision, the previously active revision remains intact and re-activatable, and an existing draft is returned with created: false. This prevents the agent from assuming duplicate creation or destructive overwrite.
Agents need to know what a tool does to the 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 deliver purpose, workflow, and idempotence behavior without redundancy. The main action is front-loaded, and every sentence contributes unique information needed to use the tool correctly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still explains the return semantics (returns the draft with created: false for existing drafts), the file-copy behavior, and the lifecycle relationship to edit and promote operations. Nothing essential for invoking 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%, so the schema already documents both parameters fully. The description's mention of copying from the active revision or source_revision_id adds minimal meaning beyond the existing schema descriptions, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Open a draft revision of a skill'), explains the copy source, and clarifies the create-or-get behavior. It explicitly names companion operations (updateSkillRevisionFile, promoteSkillRevision), making it distinguishable from other revision-related 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 embeds the tool in a clear workflow: open a draft, edit it, then promote it. It also warns about the one-open-draft constraint and the existing-draft fallback. However, it does not explicitly contrast this with related tools such as createRevision, so exclusion guidance is incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createTeamInviteCreate Team InviteAInspect
Invite one person to a team. Pass processId to invite them to a specific Clarity process instead of the whole team (that requires the team:clarity-member role). Creating the invitation does NOT email anyone — call sendTeamInviteEmail with the returned id to deliver it, or use bulkCreateTeamInvites, which creates and emails in one step.
| Name | Required | Description | Default |
|---|---|---|---|
| role | Yes | Team role to grant. One of: team:owner, team:superadmin, team:admin (deprecated), team:manager, team:builder, team:member, team:clarity-member. You cannot grant a role above your own. Process invitations must use team:clarity-member. | |
| Yes | Email address of the person to invite. | ||
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| processId | No | Invite the person to this Clarity process rather than the whole team. Requires the team:clarity-member role. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (which only say readOnlyHint=false, idempotentHint=false, destructiveHint=false), the description reveals a key behavioral trait: no email is sent. It also implies a returned id usable by a later tool. It could add more about duplicate-invite behavior, but the main side-effect is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler: the first states the core action, the second explains the special processId case, and the third routes to related tools. Information is front-loaded and each sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, email side-effect, related tools, and role prerequisites, while the schema covers team_id and role constraints. Since there is no output schema, noting the returned id for the next email step is helpful. Minor omissions like duplicate-invite behavior keep it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already explains role, email, team_id, and processId in detail. The description adds context for processId and the role requirement, but most parameter meaning comes from the schema, 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 and resource: 'Invite one person to a team.' It also distinguishes itself from bulkCreateTeamInvites and sendTeamInviteEmail, and clarifies the processId variant. An agent can identify this tool's exact role among many sibling create tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says creating the invitation does NOT email anyone, and directs the agent to sendTeamInviteEmail or bulkCreateTeamInvites for email delivery. It also conditions processId usage on the team:clarity-member role, giving clear 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.
createTeamInviteLinkCreate Team Invite LinkAInspect
Create or regenerate the team's shareable invite link — the one URL anyone can use to join the team. Regenerating invalidates the previous link, so anyone still holding the old URL can no longer join. Requires the Manager role or above.
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| frontendUrl | No | Deprecated and ignored. The link is built from the server's configured frontend URL so a caller can't choose the host in a Duvo-branded email. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description clearly discloses the key side effect: regenerating invalidates the previous link, so old URL holders can no longer join. It also adds the authorization requirement (Manager role or above), which is valuable context beyond the annotations. This goes well beyond what annotations alone 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?
Three sentences, each earning its place: the main action, the invalidation side effect, and the required role. The core purpose is front-loaded and 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 two-parameter tool with 100% schema coverage and clear annotations, the description provides everything an agent needs to invoke it correctly: what it does, what happens on regeneration, and who is allowed to call it. The absence of an output schema is mitigated because the tool's purpose inherently defines its result — the join link.
Complex tools with many parameters or behaviors need more documentation. Simple 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 schema itself already documents team_id's fallback behavior and frontendUrl's deprecated/ignored status. The tool description adds no parameter-level detail, so it meets but does not exceed the baseline for fully covered schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific language — 'Create or regenerate the team's shareable invite link' — and identifies the exact resource: the single URL anyone can use to join the team. It also distinguishes itself from sibling tools like createTeamInvite by emphasizing that this is the one universal join link, not an individual invitation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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: you call this when you need the team's shareable join URL, and it notes the Manager-or-above role requirement. It does not explicitly name alternative tools such as createTeamInvite or getTeamInviteLink, so it stops short of full 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.
declineClarityLandscapeNodeDecline Clarity Landscape NodeAInspect
Reject a proposed process landscape node while it is still a proposal, removing it and any proposed descendants. Real processes nested underneath survive and move back to Unsorted. Only proposals can be declined — an accepted node is removed with deleteClarityLandscapeNode.
| Name | Required | Description | Default |
|---|---|---|---|
| orgId | Yes | ||
| nodeId | Yes | The proposed node to reject. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are thin (readOnly=false, destructiveHint=false, no idempotency), so the description carries the disclosure burden and succeeds. It reveals the cascade effect (proposed descendants are removed), what survives (real processes), and their relocation (back to Unsorted). There is mild tension between destructiveHint=false and the removal behavior, but the description's explicit scoping to transient proposals resolves rather than contradicts the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with zero waste: primary action and effect, survival/relocation behavior, then the exclusion condition with the named alternative. The most decision-relevant information is front-loaded, and nothing restates the tool's name or title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-UUID-parameter tool with no output schema, the description covers the action, cascade behavior, survival of real processes, relocation to Unsorted, and the proposal-only restriction. The only gaps are what the call returns and behavior on an invalid or already-declined node — minor given the annotations and explicit state restriction.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50%: nodeId has a description but orgId is undocumented in both the schema and the tool description. The description adds the key state constraint ('Only proposals can be declined'), reinforcing nodeId's semantics, but it does not compensate for the undocumented orgId or clarify how the two parameters relate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb and resource: 'Reject a proposed process landscape node.' It immediately scopes the operation to proposal state and names the sibling it is not (deleteClarityLandscapeNode for accepted nodes), so an agent can distinguish it from acceptClarityLandscapeNode and deleteClarityLandscapeNode 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?
Explicitly states the condition for use ('Only proposals can be declined') and names the alternative tool for the other case ('an accepted node is removed with deleteClarityLandscapeNode'). This gives both positive and negative routing guidance, leaving no inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteAgentDelete AgentADestructiveIdempotentInspect
Delete an agent and cascade-clean its schedules, case triggers, builder runs, and handover targets. Any active jobs are interrupted and their sandboxes paused.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | The agent's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and readOnlyHint=false, so the description adds purely additive value: it specifies exactly what gets destroyed (schedules, case triggers, builder runs, handover targets) and discloses runtime side effects (active jobs interrupted, sandboxes paused). This is precisely the behavioral context an agent needs beyond the annotation flags.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with zero waste. The core action and cascade scope are front-loaded in sentence one, and the side effects on active jobs and sandboxes follow in sentence two. 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 destructive one-parameter tool, the combination of annotations (destructive, idempotent) and description (cascade scope, job interruption, sandbox pause) gives an agent nearly everything needed. With no output schema, return behavior is not specified, but the idempotentHint=true annotation partially covers the error/no-op question for already-deleted agents.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — the single agent_id parameter is already described as 'The agent's unique identifier' with a UUID format. The description adds no parameter-level meaning, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Delete an agent') and then details the full scope of what deletion entails via the cascade list. This distinguishes it clearly from partial-deletion siblings like deleteAgentCaseTrigger, deleteAgentFolder, deleteSchedule, and deleteAutomation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 use is clear: this is the whole-agent destruction path. The cascade-clean detail implicitly signals to an agent that if it only wants to remove a schedule, trigger, or run, a more targeted sibling should be used. However, no alternative is named explicitly and no when-not-to-use conditions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteAgentCaseTriggerDelete Agent Case TriggerADestructiveIdempotentInspect
Delete a case trigger. Only the trigger creator or a builder/admin can delete it.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | The agent's unique identifier | |
| trigger_id | Yes | The case trigger's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation destructive and non-read-only; the description adds the authorization requirement, which annotations do not convey. No contradiction with idempotentHint is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action; the permission note is the only additional information. 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 two-parameter delete with safety annotations already provided, the description covers the essential action and authorization context. It doesn't explicitly mention the agent-trigger ownership relationship, but that is strongly implied by the tool name and 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?
Both parameters are fully described in the schema with UUID formats and meanings, so schema coverage is 100%. The description adds no parameter-specific details, matching 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 opens with a direct verb and object ('Delete a case trigger'), stating exactly what the tool does. The phrase 'case trigger' distinguishes it from sibling deletion tools such as deleteSlackTrigger, and the permission clause further narrows the operation's 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 authorization constraint ('Only the trigger creator or a builder/admin can delete it') gives an agent clear context on when invocation is permitted. It does not name alternatives like updateAgentCaseTrigger, but for a delete tool this is sufficient context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteAgentFolderDelete Agent FolderADestructiveIdempotentInspect
Delete an agent folder. If the folder contains assignments or subfolders, pass force=true to delete it and move the contained assignments to the root level.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | Pass 'true' to delete a folder that still contains assignments or subfolders. Any contained assignments will be moved to the root level. | |
| folder_id | Yes | The folder's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the destructive nature and the side effect of moving assignments when force is used. While annotations already indicate destructiveHint, the description adds context about the force condition. It does not contradict annotations, but could mention that without force the delete will fail on non-empty folders, which is implied.
Agents need to know what a tool does to the 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, two sentences, with no redundant words. It efficiently conveys the core action and the conditional 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?
In the context of agent folder management, this description fully covers what the tool does and when to use force. It does not require additional explanation about return values or errors, as no output schema is expected.
Complex tools with many parameters or behaviors need more documentation. 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 descriptions for both parameters are clear and match the tool description. The folder_id is described as a unique identifier, and force explains the condition and effect. The tool description repeats the force semantics but adds no new information beyond schema, which is 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 clearly states the action (delete) and the resource (agent folder), and distinguishes it from sibling tools like createAgentFolder and updateAgentFolder. It also mentions the force option, 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?
It explicitly specifies when to use the force parameter ('If the folder contains assignments or subfolders') and describes the resulting behavior (moving assignments to root level). This provides clear guidance for correct invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteAllNotificationsDelete All NotificationsADestructiveIdempotentInspect
Soft-delete all notifications for the authenticated user's current team, read or unread. Returns the count of notifications that were deleted. Destructive — only call on explicit user request, never bulk-delete unprompted. Requires the Notification Center feature; returns 404 when it is not enabled for the team.
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond the destructiveHint annotation by explaining that deletion is soft, that the call returns the deleted count, and that a disabled feature yields 404. These details give an agent accurate expectations about side effects and failure modes.
Agents need to know what a tool does to the 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 tightly scoped sentences lead with the action and scope, then cover return value, safety rule, and error condition. No filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive bulk operation with a single optional parameter, the description covers scope, return value, when it is permitted, feature requirements, and failure behavior. There is no output schema, but the description states what is returned, so an agent has enough to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents the single team_id parameter completely, so the description adds no extra parameter semantics. With 100% schema coverage, the baseline of 3 is appropriate because the description doesn't need to compensate.
Input schemas describe structure but not intent. Descriptions should explain 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 ('soft-delete'), a precise resource ('all notifications ... read or unread'), and a scope ('authenticated user's current team'). It also distinguishes itself from sibling deleteReadNotifications by explicitly covering both read and unread notifications.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 usage context: only on explicit user request and never unprompted, plus the Notification Center feature prerequisite and 404 behavior. It does not name an alternative tool such as deleteReadNotifications for the read-only case, so it stops short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteAutomationDelete AutomationADestructiveIdempotentInspect
Soft-delete an automation. Its member agents and queues stop dispatching and disappear from listings, but their underlying rows and run history are preserved (not erased) so the automation can be restored.
| Name | Required | Description | Default |
|---|---|---|---|
| automation_id | Yes | Automation ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare destructiveHint=true and idempotentHint=true; the description adds substantial nuance by revealing the soft-delete nature: member agents and queues stop dispatching and vanish from listings while underlying rows and run history survive and can be restored. This directly answers what gets destroyed versus what is preserved, going well beyond the structured hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the verb-resource pair followed by one clause detailing the behavioral consequences. Every sentence earns its place; there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter delete operation with rich annotations, the description covers the key questions: what happens to the automation, its member agents and queues, and its underlying data. It omits the response shape and a note on idempotency in prose, but these are either captured by the idempotentHint annotation or minimal for a delete tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% — automation_id is fully documented with type, format, pattern, and a description ('Automation ID'). The description adds no parameter-level detail, so the baseline score of 3 applies; the schema carries the full burden and does so adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Soft-delete an automation,' which names a specific verb and resource, and immediately distinguishes itself from hard-delete semantics with '(not erased)'. It clearly anchors on automations, separating it from the many other delete* siblings like deleteAgent and deleteQueue, while defining the precise scope of the operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The soft-delete framing plus the explicit consequences — member agents and queues stop dispatching, disappear from listings, and data is preserved for restoration — give an agent a clear picture of when this tool is appropriate. It does not name alternative tools or state exclusions, but the resource is unambiguous and no hard-delete automation alternative exists among siblings, 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.
deleteCaseDelete CaseADestructiveIdempotentInspect
Delete a case. Interrupts any associated active runs first.
| Name | Required | Description | Default |
|---|---|---|---|
| case_id | Yes | The case's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as destructive and idempotent. The description adds valuable context by disclosing that active runs are interrupted before deletion, which is not inferable from the annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences: the action is first, and the key behavioral caveat is included without excess. Every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter destructive operation, the description is complete. Annotations cover idempotency and destructive intent, and the description covers the main side effect.
Complex tools with many parameters or behaviors need more documentation. 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 the single case_id parameter with type, format, and description. The tool description adds no additional parameter detail, so it does not need to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Delete a case.' The addition that it interrupts active runs first further distinguishes it from simple delete operations and clarifies 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 intended use is implied: use this when a case should be permanently removed. It does not explicitly compare against alternatives like updating a case or stopping runs, though the interruption note hints at related workflows.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteCaseAttachmentDelete Case AttachmentADestructiveIdempotentInspect
Remove a file from a case. The row is soft-deleted; deletion of the stored object is attempted best-effort.
| Name | Required | Description | Default |
|---|---|---|---|
| case_id | Yes | The case's unique identifier | |
| queue_id | Yes | The queue's unique identifier | |
| attachment_id | Yes | The attachment's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds important behavioral detail beyond the annotations by disclosing that the database row is soft-deleted and that the stored object deletion is best-effort. This sets accurate expectations about reversibility and failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the primary action front-loaded and the critical side-effect immediately after. No filler, repetition, or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with no output schema, the description covers the essential behavior: soft deletion and best-effort object removal. It could add permission or error details, but the annotations already cover idempotency and destructiveness, so 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?
The input schema already provides 100% coverage of all three UUID parameters with descriptions. The tool description adds no per-parameter semantics, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Remove a file from a case.' This clearly matches the tool name and distinguishes it from generic deleteCase or deleteFile operations, though it does not explicitly contrast with sibling attachment tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives such as finalizeCaseAttachment, getCaseAttachmentDownloadUrl, or deleteFile. The intended usage is only implied by the name and the 'from a case' scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteCaseQueueEvalRubricDelete Case Queue Eval RubricADestructiveIdempotentInspect
Remove a single case-level evaluation rubric. Cases settled after this are no longer judged against it; already-judged cases keep their original verdicts. Removing the queue's last remaining rubric is refused with 409 — whole-case evaluation regenerates rubrics for an empty set at the next settlement, so the removal would not stay removed.
| Name | Required | Description | Default |
|---|---|---|---|
| queue_id | Yes | The queue's unique identifier | |
| rubric_id | Yes | The case-level rubric's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though destructiveHint and idempotentHint already flag safety, the description reveals substantive behavior beyond annotations: settled cases retain verdicts, future cases stop being judged, and the 409 refusal is explained with a rationale. This is exactly the kind of context an agent needs for a destructive deletion.
Agents need to know what a tool does to the 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 action, consequence, and edge case with no filler. The most important information is front-loaded, and the 409 exception is explained rather than merely stated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no output schema, the description covers what happens to future and already-judged cases, the edge case that triggers refusal, and why that refusal exists. Nothing essential for calling or understanding the outcome 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 schema already defines queue_id and rubric_id as unique identifiers. The description adds mild context by tying rubric_id to a single case-level rubric and queue_id to the queue's last-remaining-rubric check, but it does not materially extend the schema's parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence 'Remove a single case-level evaluation rubric' specifies the action, object, and scope precisely. The queue context and the single-rubric constraint separate it from generic deleteEvalRubric and from create/update/replace siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys when deletion applies through 'single' and the queue context, and it gives a concrete exclusion: removal of the last remaining rubric is refused. However, it never names alternative tools such as updateCaseQueueEvalRubric or replaceCaseQueueEvalRubrics, so the when-vs-alternatives guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteClarityArtifactChatConversationDelete Clarity Artifact Chat ConversationADestructiveIdempotentInspect
Soft-delete an open or running artifact-chat conversation for the current user.
| Name | Required | Description | Default |
|---|---|---|---|
| process_id | Yes | The Clarity process id | |
| conversation_id | Yes | The artifact-chat conversation id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already flag destructive=true, but the description adds meaningful behavioral context: the deletion is a 'soft-delete' rather than a hard purge, and it is scoped to the current user. It also conditions validity on the conversation being 'open or running.' Nothing contradicts the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the operative verb, and no filler or repetition of the title. Every phrase ('soft-delete', 'open or running', 'current user') adds useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter destructive action, the description provides the target, operation type, state precondition, and user scope; the schema covers parameter specifics. It does not describe return values or observable effects of a soft-delete, but with destructive and idempotent annotations this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema documents both parameters fully with format, pattern, and descriptions, so the 100% coverage baseline applies. The tool description adds no additional meaning about process_id or conversation_id 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 the exact verb ('soft-delete'), the resource ('artifact-chat conversation'), and the relevant qualifiers ('open or running', 'for the current user'). This clearly distinguishes it from other delete and artifact-chat tools without requiring inspection of the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the valid state ('open or running') and user scope explicit, so an agent can infer when it applies. However, it does not name the closely related alternative stopClarityArtifactChatConversation or explain when to choose this delete operation over stopping a conversation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteClarityCaptureDelete Clarity CaptureCDestructiveIdempotentInspect
Delete a capture from a clarity process
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The clarity process ID | |
| captureId | Yes | The capture ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already carry destructiveHint=true, readOnlyHint=false, and idempotentHint=true. The description adds no behavioral context beyond what the annotations already signal — it doesn't mention permanence, side effects, cascading deletions, or return behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clear sentence with no wasted words. It is concise and front-loaded, though it could add a short clause about permanence or side effects without becoming bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (2 params, no output schema), but the description omits consequences of deletion, such as whether it is permanent or whether dependent data is affected. The annotations cover the destructive nature, making this minimally sufficient but not complete for an agent that needs to anticipate side effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both id and captureId fully documented as UUIDs with clear meanings ('The clarity process ID', 'The capture ID to delete'). The description adds no additional parameter meaning, 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: 'Delete a capture from a clarity process.' This distinguishes it from sibling tools like deleteClarityProcess or deleteClarityFolder, though it doesn't clarify what a 'capture' is or how it differs from a 'suggestion' in sibling tools like dismissClarityCaptureSuggestion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as getClarityCapture, listClarityLandscapeCaptures, or dismissClarityCaptureSuggestion. No prerequisites, exclusions, or context are provided to help an agent choose this tool correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteClarityFolderDelete Clarity FolderADestructiveIdempotentInspect
Delete a process folder. Contained processes fall back to Unfiled.
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| folderId | Yes | Folder to delete. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=true. The description adds the key non-obvious behavior that contained processes are not destroyed but reassigned to Unfiled, which is valuable beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no repetition of the title or redundant qualifiers. The action is front-loaded and the side effect is stated in the second sentence, earning its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple destructive tool with complete schema coverage, strong annotations, and no output schema, the description provides the critical behavioral consequence (processes fall back to Unfiled). Nothing needed for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with team_id already documented in detail and folderId described as 'Folder to delete.' The tool description adds no parameter-level meaning beyond what the schema provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Delete') and a specific resource ('a process folder'), and the second sentence clarifies scope by distinguishing folder deletion from process deletion. It differentiates this from siblings like deleteClarityProcess and updateClarityFolder 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?
Usage is implied: use this when the goal is to remove a process folder. The fallback-to-Unfiled side effect gives useful context for choosing this over deleting processes individually, but no explicit when/when-not conditions or alternative tools are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteClarityLandscapeNodeDelete Clarity Landscape NodeADestructiveIdempotentInspect
Soft-delete a tree node and its descendants. Organization admins may delete any subtree; team managers may delete a childless process node owned by their team. The targeted node's linked clarity process and captures are deleted, while nested processes detach to the Unsorted bag.
| Name | Required | Description | Default |
|---|---|---|---|
| orgId | Yes | ||
| nodeId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behavioral traits beyond annotations: it is a soft-delete, it deletes linked clarity process and captures, and nested processes detach to the Unsorted bag. These side effects are critical for the agent to understand the impact. This goes well beyond the destructiveHint annotation and provides specific consequences.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the main action and followed by essential details. No filler or redundancy. It efficiently covers the core behavior and conditions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive operation with cascading effects, the description covers permissions, the scope of deletion, and the fate of linked and nested entities. It is complete enough for an agent to understand the consequences and prerequisites. The absence of an output schema is acceptable, and the description does not omit critical information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must explain parameter meaning. It explicitly identifies nodeId as the tree node being deleted, but orgId is not directly defined; its role is implied by 'Organization admins.' This partial clarification is insufficient for full compensation, though the context helps infer orgId's purpose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: soft-deleting a tree node and its descendants. It distinguishes this from other delete operations by specifying the scope (subtree vs childless) and the cascading effects on linked processes and captures. The name and description align, and it's unambiguous what resource is acted upon.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit conditions for usage: organization admins can delete any subtree, while team managers can delete childless process nodes owned by their team. This gives clear permission-based guidance. However, it does not explicitly name alternative tools (e.g., deleteClarityProcess) or state when to choose this over others, though the distinction is implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteClarityLandscapeNodeInterviewDelete Clarity Landscape Node InterviewBDestructiveIdempotentInspect
Delete an organization-scoped folder interview
| Name | Required | Description | Default |
|---|---|---|---|
| orgId | Yes | The organization ID | |
| nodeId | Yes | The clarity process folder node ID | |
| interviewId | Yes | The folder interview ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish destructiveHint=true and idempotentHint=true; the description adds the scoped target and implies the interview is removed rather than the folder/node, but it does not disclose permanence, cascading effects, or permission requirements. There is no contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It efficiently states the action and the resource, and every word contributes to the meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-ID delete, the schema and annotations supply most invocation details, and there is no output schema to explain. However, the description omits usage context such as which sibling delete tools it should be chosen over and what side effects, if any, occur, so it is only minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each parameter has a clear description, so the schema carries the parameter meaning. The tool description adds little beyond the 'organization-scoped' phrasing, which maps loosely to orgId, 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 concrete verb ('Delete') and a specific resource ('organization-scoped folder interview'), so an agent can see this removes a folder/node-level interview. It is clear, but it relies on the title and sibling names to disambiguate from deleteClarityOrganizationInterview and deleteClarityTeamInterview, so it does not earn a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no conditions, prerequisites, or exclusions, and never mentions the alternative interview-deletion tools. An agent has to infer when this tool is the right one from the tool name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteClarityOrganizationInterviewDelete Clarity Organization InterviewCDestructiveIdempotentInspect
Delete an organization-level Clarity interview
| Name | Required | Description | Default |
|---|---|---|---|
| orgId | Yes | ||
| interviewId | Yes | The organization interview ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already supply destructiveHint=true, idempotentHint=true, and readOnlyHint=false, and the description is consistent with them, so there is no contradiction. However, the description adds no behavioral context beyond the structured hints — it does not say whether deletion cascades to related artifacts, is permanent or recoverable, or affects associated 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 single sentence has zero wasted words and front-loads the action verb. But it is essentially a paraphrase of the tool title, so the brevity reflects under-specification rather than deliberate compression of rich content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with no output schema and only 50% parameter coverage, the description is too thin to support safe autonomous invocation. Missing are the effect of deletion (permanent vs. reversible), any cascade or scoping behavior, and the meaning of the orgId parameter — all of which an agent needs to invoke this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50%: interviewId has a minimal description ('The organization interview ID') while orgId is entirely undocumented in the schema. The tool description compensates for neither — it contains no information about the parameters, their relationship, or how an agent should obtain valid UUIDs for them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Delete') and a scoped resource ('organization-level Clarity interview'), and the 'organization-level' qualifier helps differentiate it from the sibling tools deleteClarityTeamInterview and deleteClarityLandscapeNodeInterview. However, it adds nothing beyond the title and does not explicitly name or contrast those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as deleteClarityTeamInterview or deleteClarityLandscapeNodeInterview, nor any preconditions, side-effect warnings, or when-not-to-use conditions. The 'organization-level' scope only weakly implies a selection rule, and no exclusions or sibling references are present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteClarityProcessDelete Clarity ProcessADestructiveIdempotentInspect
Delete a Clarity process. The creator or a team admin can delete it unless capture analysis is still in progress.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Clarity process id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the description is not responsible for establishing destructiveness. It adds useful behavioral context beyond annotations by identifying required permissions and the capture-analysis guard condition. This helps the agent predict failure modes and authorization requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. The core action is front-loaded, and the conditional permission context follows immediately. Every word adds meaningful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter destructive operation with annotations already covering safety and idempotency, the description provides the essential extra context: who may delete and the one blocking condition. No output schema exists, but the description does not need to explain return values. The tool is fully understood 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 has 100% description coverage for the single 'id' parameter, which is already documented as 'Clarity process id'. The description does not add further parameter-level detail, but because the schema fully covers the parameter, the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Delete') and resource ('a Clarity process'), making the operation unmistakable. It clearly distinguishes this from sibling delete tools like deleteClarityCapture or deleteClarityFolder by naming the exact resource type. No ambiguity about what the tool acts on.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 conditions for when deletion is allowed: only the creator or a team admin, and only when capture analysis is not still in progress. This effectively tells an agent when not to invoke the tool, although it does not explicitly name alternative tools for different scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteClarityProcessInviteLinkDelete Clarity Process Invite LinkBDestructiveIdempotentInspect
Delete the active interview invite link for a process.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=true, so the description only needs to add operational context. It does so by clarifying that the tool targets the active interview invite link for a process, not just any link. It does not spell out side effects like invalidating in-flight invitations, but the annotations cover the core safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that is front-loaded with the verb and contains no filler. Every word adds relevant meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter delete tool with annotations covering destructiveness and idempotence, the description is close to sufficient. However, it misses an explicit statement of what 'id' refers to and does not mention the practical consequence that deleting the invite link invalidates access to the interview invitation.
Complex tools with many parameters or behaviors need more documentation. 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, and the description does not explicitly define whether the required 'id' is a process ID or an invite-link ID. The phrase 'for a process' hints that it is the process ID, but this is left to inference for an otherwise undocumented 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 uses a specific verb ('Delete'), identifies the resource as the 'active interview invite link', and scopes it to a process. This distinguishes it from sibling tools like deleteClarityProcessLink and deleteClarityProcess, though it does not explicitly name an alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus related invite-link or process-link tools. The only implied condition is that an active link exists, with no exclusions or alternatives mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteClarityProcessLabelDelete Clarity Process LabelBDestructiveIdempotentInspect
Delete process tags from an organization.
| Name | Required | Description | Default |
|---|---|---|---|
| orgId | Yes | ||
| labelId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=true, and the description's 'Delete' is consistent with them. It adds no extra behavior such as whether the tag is also removed from existing processes or whether deletion is permanent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single direct sentence with no filler, and the action is front-loaded. It is concise, though it achieves brevity at the expense of helpful context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-UUID deletion, the schema and annotations cover the mechanics, but the description leaves open what happens to labels attached to processes and gives no indication of return behavior. It is minimally viable but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain the meaning or relationship of orgId and labelId beyond the parameter names. It relies on the self-evident names and UUID format rather than adding semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the verb ('Delete') and the resource ('process tags'), and scopes it to an organization. It does not contrast with the similar sibling unlinkClarityProcessLabels, so an agent cannot immediately tell whether this removes the label definition or just detaches it from a process.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to call this tool instead of related tools such as unlinkClarityProcessLabels or assignClarityProcessLabels. The agent must infer usage from the name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteClarityProcessLinkDelete Clarity Process LinkADestructiveIdempotentInspect
Delete a process-to-process link from the organization's Clarity landscape when the caller can manage both endpoint teams.
| Name | Required | Description | Default |
|---|---|---|---|
| orgId | Yes | ||
| process_link_id | Yes | Unique process-link identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey destructiveHint=true and idempotentHint=true. The description adds useful context beyond those annotations by specifying the exact object affected (process-to-process link) and the authorization requirement (manage both endpoint teams). No side effects beyond deletion are disclosed, but the annotation set covers the core safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence with no filler; the action, object, scope, and precondition are all front-loaded. Every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter delete tool with annotations covering destructive/idempotent behavior, this is nearly complete: purpose, scope, and authorization are covered. The only minor gap is that it does not describe behavior when the link is missing or permissions are insufficient, which is not essential for selecting and invoking the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description does not explicitly document orgId or process_link_id, but the schema already explains process_link_id and both parameter names are self-explanatory UUID identifiers. The mention of 'organization' and 'endpoint teams' provides light domain context for the two parameters, though it does not fully compensate for the missing orgId description in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Delete') and object ('process-to-process link') with a clear scope ('organization's Clarity landscape'), which immediately distinguishes it from sibling tools like deleteClarityProcess, createClarityProcessLink, and updateClarityProcessLink. There is no ambiguity about what resource this tool acts on.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear precondition ('when the caller can manage both endpoint teams') and the resource type, so an agent knows when this tool is applicable. It does not explicitly name alternatives or when-not-to-use conditions, but for a delete operation the use case is self-evident among the sibling tool list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteClarityTeamInterviewDelete Clarity Team InterviewADestructiveIdempotentInspect
Delete a team-level Clarity interview
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| interviewId | Yes | The team interview ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered without the description. The description adds no behavioral context beyond the operation itself — no mention of irreversibility, cascading effects on associated data, or auth requirements. 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?
A single seven-word sentence with zero filler. The core verb and scoping qualifier are front-loaded, and every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive operation with no output schema, the combination is adequate but thin: annotations flag destructiveness, and the schema fully documents parameters. However, the description does not state what happens to the interview's associated data or whether deletion is reversible, which would matter to an agent weighing side effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents both parameters richly — especially team_id, which explains the API-key pinning vs OAuth multi-team behavior in detail. The description adds no parameter-level information, but at full 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 uses a specific verb ('Delete') and a precise resource ('team-level Clarity interview'). The 'team-level' qualifier effectively distinguishes it from sibling tools like deleteClarityOrganizationInterview and deleteClarityLandscapeNodeInterview, so an agent can tell them apart without inspecting 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 'team-level' scope implies when the tool applies, giving a basic sense of usage context. However, no alternatives are named and no exclusions or prerequisites (e.g., required permissions, inability to delete org-level interviews) are stated, leaving the agent to infer the boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteConnectionDelete ConnectionADestructiveIdempotentInspect
Delete a connection (disconnects the user's connection and removes any triggers bound to it).
| Name | Required | Description | Default |
|---|---|---|---|
| connection_id | Yes | Connection ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructive, idempotent), the description adds that it disconnects the user's connection and removes any triggers bound to it. This provides valuable side-effect information not captured in the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no unnecessary words. It efficiently communicates the operation and its side effects.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete operation with no output schema, the description adequately explains what the operation does. It covers the essential behavior and side effects, making it complete for an agent to use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter connection_id has a clear description in the schema ('Connection ID'). The description does not add any additional meaning beyond what the schema already provides, so it meets 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 states a specific verb ('Delete') and resource ('connection'), and clarifies that it disconnects the connection and removes triggers. This clearly distinguishes it from other connection operations like updateConnection or getConnection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 you want to remove a connection entirely, but does not explicitly contrast with updateConnection or other alternatives. It lacks an explicit 'when-not' statement, but the context is strong enough to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteCredentialDelete credential by idADestructiveIdempotentInspect
Delete a login by id. Deleting a team-shared login requires lead builder role.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| userId | Yes | ||
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint=true, readOnlyHint=false), the description adds that deleting a team-shared login requires the lead builder role, which is useful authorization context. It does not elaborate on side effects, but the destructive hint already covers the core safety trait and the idempotent hint signals repeatability.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler: the core action comes first and the authorization caveat second. Every clause carries information that an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no output schema, the description plus annotations cover the key facts: what is deleted, by id, and the special role requirement. However, it leaves the required userId unexplained and does not mention whether deletion affects related revisions or integrations, so an agent may still need to infer ownership semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only the optional team_id has a schema description; the required id and userId are undocumented, and the description only says 'by id' without explaining what userId represents or how it relates to ownership. With schema description coverage at 33%, the description needed to compensate for the missing parameter context and did 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 states a specific action and target — 'Delete a login by id' — and the verb clearly distinguishes it from get/update/list credential tools. The term 'login' identifies the credential resource, and the title reinforces the same intent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only usage signal is the role requirement for team-shared logins; there is no guidance on when to use deleteCredential versus deleteSecret or deleteConnection, nor any mention of how to find the id or what preconditions apply beyond role. The intended use is implied by the delete verb but not explicitly framed against alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteCustomIntegrationDelete Custom IntegrationADestructiveIdempotentInspect
Delete a custom integration type (team-level catalog entry) and cascade-remove related connections. Requires manager-or-above role.
| Name | Required | Description | Default |
|---|---|---|---|
| custom_integration_id | Yes | Custom integration type ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals an important behavioral consequence (cascade-removes related connections) and a role gate, which is beyond the annotations. However, it does not explicitly state irreversibility or idempotency, though the annotations already indicate destructive and idempotent hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with no extraneous information. The action, object, scope, effect, and requirement are all presented clearly and efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the key contextual elements (what is deleted, cascade effect, required role). It does not mention error scenarios or return values, but given the simplicity of the operation and lack of output schema, it is sufficiently complete 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?
The schema description for 'custom_integration_id' fully covers the parameter meaning ('Custom integration type ID'). The tool description adds no additional context for this parameter, so it stays at the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Delete'), the resource ('custom integration type'), and the scope ('team-level catalog entry'), along with the cascade effect on related connections. This clearly distinguishes the tool's purpose from other operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 includes a usage precondition ('Requires manager-or-above role') and the cascade behavior, but does not explicitly contrast with alternatives (e.g., soft delete or disable). The role requirement and effect provide some guidance, though not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteEvalRubricDelete Eval RubricADestructiveIdempotentInspect
Remove a single Agent-specific evaluation rubric. Future Runs on the build are no longer scored against it.
| Name | Required | Description | Default |
|---|---|---|---|
| agentId | Yes | The agent's unique identifier (Assignment ID) | |
| rubricId | Yes | The custom rubric's unique identifier | |
| selected_automation_revision_id | No | The automation revision this edit is being made at. Pass a draft and the edit is folded into that draft itself; pass the active revision and the edit lands on a draft branched from it. A historic revision is rejected — it cannot be activated from without an explicit rebase. A revision belonging to a different automation is ignored, and the edit targets the automation the addressed agent belongs to. Omit to target the automation's active revision. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true, and the description adds the useful behavioral context that the rubric will no longer be used to score future Runs on the build. This clarifies the long-term effect of the destructive operation and 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 two compact sentences with no wasted words. The primary action is front-loaded, and the consequence is stated immediately after, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a straightforward delete operation, the description adequately states the action and the lasting effect on future Runs. There is no output schema, but the annotations cover the destructive and idempotent profile, and the schema fully describes the optional revision parameter. The description is sufficient without over-explaining.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% description coverage for all three parameters, so the baseline applies. The description's phrase 'Agent-specific' loosely aligns with agentId but adds no new meaning beyond what the schema already documents for agentId, rubricId, and selected_automation_revision_id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Remove') and a specific resource ('a single Agent-specific evaluation rubric'), and it conveys the consequence of the action. The word 'single' helps separate it from bulk operations like replaceEvalRubrics, but it never explicitly names sibling tools, so differentiation is left partly to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a purpose (stop scoring future runs against a rubric) but provides no explicit when-to-use guidance, no exclusions, and no mention of alternatives such as updateEvalRubric, replaceEvalRubrics, or deleteCaseQueueEvalRubric. An agent is not told how to choose this tool over its siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteFileDelete FileADestructiveIdempotentInspect
Delete a file from team storage.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path of the file to delete relative to the team's storage root | |
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the description doesn't need to repeat those. It does usefully specify that the path is relative to the team storage root, and the team_id param description adds important context about API key pinning. However, it doesn't describe post-delete behavior (e.g., whether it's permanent or reversible).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste. All critical information (action, resource, context) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The operation is simple with a clear schema, destructive/readOnly annotations, and full parameter documentation. The main missing piece is whether deletion is permanent and whether it affects shared files — but for a simple delete operation this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters. The description adds minimal semantic value beyond what the schema provides — the main contribution is the 'team storage root' context in the purpose statement.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Delete') and resource ('a file from team storage'), which clearly identifies the operation and distinguishes it from siblings like renameFile, getFileContent, and getFileDownloadUrl.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 operation context clear ('team storage'), but doesn't explicitly name alternatives or state when not to use it. Sibling names like renameFile and getFileDownloadUrl provide implicit contrast, though the description itself doesn't mention them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deletePulseDashboardDelete Pulse DashboardADestructiveIdempotentInspect
Delete a Duvo Pulse dashboard. Only the creator can delete it.
| Name | Required | Description | Default |
|---|---|---|---|
| artifactId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description transparently states that only the creator can delete, aligning with the destructiveHint annotation. It doesn't mention side effects like permanent deletion or cascading behavior, but the annotation already covers destructiveness, so no contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one concise sentence that conveys the essential information without any filler. It efficiently states both the action and the key constraint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides enough context for a delete operation, including the permission model. It doesn't mention return values, but since there is no output schema, the description could optionally note success behavior. The missing info is minor for a delete action.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully describes artifactId as a UUID with format and pattern, giving 100% coverage. The description adds no additional meaning beyond the parameter name, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Delete') and the target resource ('Duvo Pulse dashboard'), with a specific permission constraint. It unambiguously differentiates from other delete tools by naming the object type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus other delete tools (e.g., deleteCase, deleteAgent). It only mentions a permission restriction, but lacks context about prerequisites, alternatives, or when NOT to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteQueueDelete QueueADestructiveIdempotentInspect
Delete a queue. Interrupts all associated active runs first and returns the number of deleted cases plus the IDs of runs that were stopped.
| Name | Required | Description | Default |
|---|---|---|---|
| queue_id | Yes | The queue's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly discloses two key behavioral aspects: that active runs are interrupted first and that the response includes the number of deleted cases and IDs of stopped runs. This goes beyond the annotations (which already indicate destructive and idempotent behavior) to provide concrete details about side effects and return values, giving full transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the primary action and succinctly adds the important details about interruption and return values. It is concise without omitting critical 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?
Given the simplicity of the operation, the description provides sufficient context: it states what it does, the side effect on runs, and what it returns. There is no output schema, but the description covers the return contents. This is complete for an agent to decide 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 schema fully describes the only parameter (queue_id as a UUID with a description), so schema coverage is 100%. The tool description does not add any additional meaning about the parameter, and per the guidelines, the baseline for high schema coverage is 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 action ('Delete a queue') with a specific verb and resource, and distinguishes it from other delete tools by explicitly mentioning the queue and its associated runs. It also provides additional context about side effects and returns, 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?
The description implies the primary use case (deleting a queue) and highlights an important side effect (interrupting active runs) that would inform a user's decision. However, it does not explicitly compare to alternative tools or state when not to use this operation, leaving some implicit context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteQueueAggregationDelete Queue AggregationADestructiveIdempotentInspect
Soft-delete an aggregation definition.
| Name | Required | Description | Default |
|---|---|---|---|
| queue_id | Yes | The queue's unique identifier | |
| definition_id | Yes | The aggregation definition's identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool to be destructive, not read-only, and idempotent. The description adds meaningful context beyond the annotations by specifying that the deletion is 'soft,' implying recoverability or non-permanent removal. This complements the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, short sentence with zero wasted words. It front-loads the action ('soft-delete') and the target object ('aggregation definition') immediately, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with rich annotations and a fully documented schema, the description covers the core operation sufficiently. The only minor gap is that it does not explain the post-deletion state or whether soft-deleted definitions can be restored, but the term 'soft-delete' implies recovery and the annotations already cover destructiveness and idempotency.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both queue_id and definition_id documented in the schema. The description itself adds no additional parameter meaning, but the schema fully identifies each parameter's purpose, matching the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Soft-delete') and the resource ('an aggregation definition'), which is specific and distinguishes it from other delete tools like deleteQueue, deleteQueueLabel, or deleteQueueJsonSchema. Even without comparing schemas, an agent can tell exactly what this tool operates on.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance about when to use this tool versus alternatives such as createQueueAggregation, listQueueAggregations, refreshQueueAggregation, or a hypothetical hard delete. It relies entirely on the tool name and the word 'delete' to imply usage, with no prerequisites or contextual conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteQueueLabelDelete Queue LabelADestructiveIdempotentInspect
Delete a label from a queue. Cascade-deletes all assignments of this label on existing cases.
| Name | Required | Description | Default |
|---|---|---|---|
| label_id | Yes | The label's unique identifier | |
| queue_id | Yes | The queue's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds the crucial behavioral detail of cascade-deleting all assignments on existing cases, which goes beyond the annotation's destructiveHint. It transparently communicates this side effect, though it doesn't mention idempotency or irreversibility explicitly (though annotations cover these).
Agents need to know what a tool does to the 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 includes the essential cascade detail. It is efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive delete operation, the description provides sufficient context: what is deleted and the cascade effect. No output schema is needed, and the description covers the relevant aspects without superfluous information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides descriptions for both parameters ('The label's unique identifier' and 'The queue's unique identifier') with 100% coverage. The description adds no further semantic information about the parameters, so it meets the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Delete a label from a queue') and specifies the cascade-delete effect on assignments. It effectively distinguishes this tool from siblings like deleteQueue, deleteQueueAggregation, and updateQueueLabel.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 you need to delete a label and its assignments) but does not explicitly contrast it with alternatives like updateQueueLabel or deleteQueue. It lacks direct guidance on when to prefer this tool over similar ones.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteReadNotificationsDelete Read NotificationsADestructiveIdempotentInspect
Soft-delete all read notifications for the authenticated user's current team. Returns the count of notifications that were deleted. Destructive — only call on explicit user request. Requires the Notification Center feature; returns 404 when it is not enabled for the team.
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by disclosing that the operation is a soft-delete, that it returns the count of deleted notifications, and that it returns 404 when the Notification Center feature is disabled. It reinforces the destructiveHint with an explicit 'only call on explicit user request' warning. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences carry all essential information: what the tool does, what it returns, destructive warning, and feature prerequisite. There is no filler, and the most important behavioral facts are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter destructive mutation with no output schema, the description is complete: it specifies the action, scope, return value, destructive nature, and an important error condition. The schema covers team_id semantics, and annotations cover the destructive and idempotent hints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already has 100% coverage for team_id, including detailed explanation of API key versus OAuth behavior. The description adds no new parameter-specific guidance beyond referring to the 'current team', which the schema already covers. 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: 'Soft-delete all read notifications for the authenticated user's current team.' It clearly distinguishes this from sibling tools like deleteAllNotifications by specifying 'read' notifications, and it also clarifies the team scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: it deletes read notifications for the current team, is destructive, and should only be called on explicit user request. It also notes the Notification Center feature prerequisite and 404 behavior. It does not explicitly name alternatives like deleteAllNotifications, but the scope is clear enough for an agent to infer 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.
deleteScheduleDelete ScheduleADestructiveIdempotentInspect
Delete a schedule. Owners may delete their own schedules; team superadmins may delete any schedule on agents in the current team.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | The agent's unique identifier | |
| schedule_id | Yes | The schedule's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the description does not need to restate these. The description adds valuable behavioral context about authorization and scope boundaries, which is not available in annotations or schema. This goes beyond what structured fields 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 no redundancy. The core action 'Delete a schedule' is front-loaded, and the second sentence efficiently adds the necessary permission model. Every word contributes to the agent's understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete operation with two fully documented parameters and annotations covering destructiveness and idempotency, the description is complete. It supplies the critical ownership/superadmin authorization context that an agent cannot infer from schema or annotations. No additional behavioral or return-value detail is necessary for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both agent_id and schedule_id already described as unique identifiers. The description adds no additional meaning about the parameters themselves, but the permission context implies agent_id identifies the owning agent. Per calibration, a score of 3 is appropriate when the schema fully documents parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb and resource: 'Delete a schedule.' It also differentiates from sibling tools like createSchedule, updateSchedule, and listAgentSchedules by explicitly naming the delete action. The permission scoping ('Owners may delete their own schedules; team superadmins may delete any schedule...') adds additional precision 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 provides clear context for when the tool can be used by specifying the authorization requirements: schedule owners and team superadmins. It does not explicitly name alternatives like updateSchedule for modifications, but the context is sufficient for an agent to understand this is the deletion path. No misleading or exclusionary guidance is present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteSecretDelete SecretBDestructiveIdempotentInspect
Soft-delete an env-var secret. Deleting a team-shared secret requires lead builder role.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals a role requirement (lead builder) and clarifies that the operation is a soft-delete, which adds behavioral context beyond the annotations. However, it does not mention reversibility, side effects, or what happens to related data, leaving some behavior implicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, containing only the essential action and a role requirement. It avoids any redundant or irrelevant information, making it 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?
Given the simple nature of the tool (single parameter, no output schema), the description provides sufficient context to understand the primary purpose and a key constraint. It lacks alternative usage guidance but is otherwise complete for basic decision-making.
Complex tools with many parameters or behaviors need more documentation. 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 'id' has no description in the schema or in the tool description. The schema provides type and format, but the description does not clarify what the id refers to (e.g., secret id, team id, etc.), adding minimal value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the action ('soft-delete') and the resource ('env-var secret'), and adds a role requirement. It is unambiguous about the operation's nature, though it doesn't elaborate on what 'soft-delete' entails.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives like deleteCredential or deleteConnection. There is no mention of preferred scenarios or conditions that would select this over other delete operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteSkillDelete SkillADestructiveIdempotentInspect
Delete a skill for the current team.
| Name | Required | Description | Default |
|---|---|---|---|
| skill_id | Yes | Skill ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered. The description adds only the current-team scope; it does not disclose whether deletion is permanent, whether revisions are also removed, or what happens to dependent references.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence with no filler or redundant wording. Every word contributes to defining the action, resource, and scope, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter delete operation, the combination of description, annotations, and schema is mostly sufficient. The description adds the current-team scope, which is useful. Minor gaps include not mentioning whether the deletion cascades to skill revisions or whether system skills are protected, but these are not essential for basic invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% description coverage for the single skill_id parameter, so the description does not need to repeat parameter details. The description adds no additional meaning beyond the schema, keeping this at the baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Delete') and a clear resource ('skill'), and scopes the operation to the current team. This cleanly distinguishes it from sibling tools like deleteSkillRevision and deleteSkill-related file operations. The action is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: call this when you need to delete a skill belonging to the current team. However, it does not explicitly state when to use this tool versus alternatives, such as deleteSkillRevision, nor does it mention any conditions, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteSkillRevisionDelete Skill RevisionADestructiveIdempotentInspect
Delete a draft or historic skill revision and its files. The active revision can't be deleted — activate another revision first.
| Name | Required | Description | Default |
|---|---|---|---|
| skill_revision_id | Yes | Skill revision ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry destructiveHint=true and readOnlyHint=false; the description adds that the operation also removes the revision's files and that active revisions are protected. This is useful behavioral context beyond the structured hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences pack the action, scope, side effect, and a limitation with no filler. The key constraints are front-loaded before the prerequisite guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter destructive operation with no output schema, the description is sufficient: it states what is deleted, what files are affected, and the one condition under which deletion fails. No critical operational detail 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 schema already defines skill_revision_id with uuid format and description. The description's draft/historic framing hints at valid IDs, but it does not add substantially new parameter-level meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action (delete), resource (skill revision), scope (draft or historic), and explicitly excludes active revisions. This distinguishes it from deleteSkill and updateSkillRevision/promoteSkillRevision without needing to inspect schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly indicates when it can be used (draft/historic revisions) and when it cannot (active revision), with a prerequisite instruction to activate another revision first. It does not name the exact sibling tool for promotion, so it stops short of full explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteSlackTriggerDelete Slack Channel TriggerADestructiveIdempotentInspect
Permanently delete a Slack channel trigger you own. The agent stops starting Runs for that channel. To keep the trigger but stop it firing, update it with enabled: false instead.
| Name | Required | Description | Default |
|---|---|---|---|
| trigger_id | Yes | The Slack channel trigger's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true and readOnlyHint=false, but the description adds important behavioral context: the deletion is permanent, the trigger will no longer start Runs for the channel, and ownership is required. This goes beyond the structured annotations and clearly discloses the real-world effect of the action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences deliver the core action, the consequence, and the alternative to deletion. Every clause 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?
For a single-parameter deletion tool with rich annotations, the description is fully complete: it names the resource, the permanent nature, the post-deletion effect, and the ownership constraint. No critical decision-making information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of the parameter descriptions, including the trigger_id format and its meaning as the Slack channel trigger's unique identifier. The description does not add additional parameter-level detail, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action—'Permanently delete a Slack channel trigger you own'—with a clear resource and scope. It also distinguishes itself from the related updateSlackTrigger tool by contrasting deletion with disabling via `enabled: false`.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 guidance on when not to use this tool: 'To keep the trigger but stop it firing, update it with `enabled: false` instead.' It also notes the ownership prerequisite with 'you own,' so an agent can route correctly between deletion and update.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteTeamInviteDelete Team InviteADestructiveIdempotentInspect
Revoke an invitation so its link and email can no longer be used. Accepts either a team invitation (requires Superadmin or above on the invitation's team) or a Clarity process invitation (requires the process creator or a team admin). Revoking one side also revokes its linked counterpart when a process invitation created both.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ID of the invitation to revoke. Accepts either a team invitation or a Clarity process invitation. | |
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing the cascading side effect ('Revoking one side also revokes its linked counterpart when a process invitation created both') and the permission tiers for each invitation type. This is exactly the kind of non-obvious behavioral context an agent needs, and it aligns with destructiveHint/idempotentHint rather than contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences with the core action front-loaded, followed by acceptance criteria, permissions, and the cascade behavior. Every sentence earns its place; there is no repetition of schema or annotation content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity tool (2 params, no output schema, no nested objects), the description is complete: it covers the action, both invocation paths, permission requirements, and the linked-revocation side effect. Annotations handle idempotency and destructiveness, and the schema covers parameters, leaving no practical gap for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both id and team_id in detail. The description reinforces that id accepts either invitation type but adds no new parameter-level meaning beyond the schema, matching 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?
States a specific verb and resource ('Revoke an invitation') plus the precise effect ('its link and email can no longer be used'). It clarifies that the tool covers two invitation types — team invitations and Clarity process invitations — which disambiguates it from siblings like deleteTeamInviteLink and updateTeamInvite 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?
Gives clear context on when the tool applies by enumerating the two accepted invitation kinds and their matching permission prerequisites (Superadmin or above for team invites; process creator or team admin for process invites). It does not explicitly name alternatives or exclusions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteTeamInviteLinkDelete Team Invite LinkADestructiveIdempotentInspect
Delete the team's shareable invite link so the URL stops working. Per-person invitations are unaffected. Requires the Manager role or above.
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide destructiveHint=true and idempotentHint=true, and the description adds valuable specifics: the exact consequence (URL stops working), that per-person invitations are unaffected, and the Manager role requirement. This clarifies blast radius and authorization without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each with distinct value: the action and effect, the non-effect on per-person invitations, and the permission requirement. There is no filler, redundancy, or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter destructive tool with a thoroughly documented schema and annotations covering destructiveness/idempotency, this description is complete. It states outcome, exclusions, and authorization; no output schema exists, so return-value details are not required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The sole parameter team_id is already fully documented in the schema with 100% coverage, including API key pinning, OAuth multi-team behavior, fallback semantics, and rejection rules. The description adds nothing about the parameter, but the schema carries the burden adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Delete the team's shareable invite link' and the observable consequence ('the URL stops working'). It explicitly scopes out per-person invitations, distinguishing this from sibling deleteTeamInvite and clarifying exactly which resource is affected.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes it clear this applies to the shareable invite link and not to per-person invitations, so an agent can avoid choosing it for individual invitations. It also states the required 'Manager role or above' prerequisite. It does not name alternative sibling tools explicitly, but the context is otherwise clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detachPulseDashboardConnectionDetach Pulse Dashboard ConnectionADestructiveIdempotentInspect
Detach a connection (data source) from a Duvo Pulse dashboard (requires edit access).
| Name | Required | Description | Default |
|---|---|---|---|
| artifactId | Yes | ||
| connectionId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the operation destructive and idempotent, lowering the disclosure burden. The description adds the edit-access requirement and clarifies that 'connection' means 'data source', which is useful context beyond the annotations. It does not state whether the underlying connection is also deleted or remains available to other dashboards, but the annotations cover the core destructive 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 a single concise sentence that front-loads the action and target, then adds the permission caveat. There is no redundant wording or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter destructive operation, the description plus annotations provide a reasonable baseline: action, target, permission, destructiveness, and idempotency. It is incomplete only in not explicitly linking parameters to their roles and not clarifying the fate of the connection after detach, which matters for a destructive 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 0%, so the description needs to compensate, but it does not explicitly map artifactId to the dashboard or connectionId to the connection. The domain terms 'dashboard' and 'connection' hint at the roles, but the mapping is left to inference, which is risky for a two-UUID parameter API.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Detach') with a specific resource ('a connection (data source)') and target ('Duvo Pulse dashboard'), clearly distinguishing it from related operations like attachPulseDashboardConnection and deleteConnection. Including the edit-access requirement adds further precision.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 semantics of 'detach a connection from a dashboard' imply this is the tool for removing a dashboard's link to a data source rather than deleting the connection entirely. However, it does not explicitly state when to prefer this over sibling tools such as deleteConnection or attachPulseDashboardConnection, nor does it provide when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detachQueueJsonSchemaDetach Queue Json SchemaADestructiveIdempotentInspect
Stop validating new cases on a queue. Typed cases already written keep their payload and their pinned schema version.
| Name | Required | Description | Default |
|---|---|---|---|
| queue_id | Yes | The queue's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark this destructive, and the description adds important nuance: existing typed cases keep their payload and pinned schema version even though validation stops. This clarifies exactly what is and is not affected, which goes beyond the bare destructiveHint.
Agents need to know what a tool does to the 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, with the primary action first and the preservation caveat second. Every sentence contributes necessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, low-complexity operation with annotations describing safety and idempotency, the description fully covers what the tool does and its important side effect on existing cases. No output schema is needed 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 single queue_id parameter is fully documented in the input schema with type, format, pattern, and a description. The tool description adds no parameter-specific meaning, so schema coverage of 100% carries the weight.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the specific operation ('Stop validating new cases on a queue') with a clear resource (queue JSON schema) and explains the practical effect of detaching it. This clearly distinguishes it from siblings like attachQueueJsonSchema and replaceQueueJsonSchema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states what the tool does but gives no guidance on when to choose it over attachQueueJsonSchema, replaceQueueJsonSchema, or other schema-related tools. No alternatives, prerequisites, or exclusion cases are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detachRevisionLoginDetach Revision LoginBDestructiveIdempotentInspect
Detach a login from a revision. Personal logins can only be detached by their owner; team-shared logins require builder permissions.
| Name | Required | Description | Default |
|---|---|---|---|
| agentId | Yes | ||
| buildId | Yes | ||
| exposedCredentialId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as destructive and idempotent. The description adds meaningful behavioral context beyond the annotations by detailing the permission requirements (owner vs. builder). This is useful for predicting whether the call will succeed and for setting expectations about access control.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded: the first sentence states the core operation, and the second adds a valuable permission nuance. There is no redundant or filler content; every sentence contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With three required parameters, zero schema descriptions, and no output schema, the description should do more to make the tool safely invocable. It omits how the parameters map to the operation, whether detaching affects the underlying credential, and any further behavioral details. The permission note is helpful but not sufficient for a complete picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description provides no explanation for agentId, buildId, or exposedCredentialId. While the parameter names are somewhat self-descriptive, the description does not connect 'login' to exposedCredentialId or clarify that buildId refers to the revision. The description fails to compensate for the lack of schema-level 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 action and resource: 'Detach a login from a revision.' It is more specific than the name alone, and the additional detail about personal vs. team-shared logins adds scope. It does not explicitly distinguish itself from sibling tools like detachRevisionSecret, but the resource difference is largely self-evident.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 authorization context: personal logins require owner permissions, team-shared require builder permissions. This helps an agent gauge whether the operation is permitted. However, it does not mention when to prefer this tool over related tools like attachRevisionLogin or detachRevisionSecret, so guidance is only partial.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detachRevisionSecretDetach Revision SecretADestructiveIdempotentInspect
Detach an env-var secret from a revision. Personal secrets can only be detached by their owner; team-shared secrets require builder permissions.
| Name | Required | Description | Default |
|---|---|---|---|
| agentId | Yes | ||
| buildId | Yes | ||
| credentialId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds value by explaining ownership-based permission differences (owner vs builder), which is not present in annotations and helps the agent predict authorization failures.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The core action is front-loaded, and the permission caveat is the only additional sentence, making the description easy to scan and process.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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, mutating tool with three opaque UUID parameters and no output schema, the description is thinner than ideal. It covers the main action and permission model, but parameter semantics and what happens on failure or success are undocumented. Annotations cover destructive/idempotent behavior, so this is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description names none of the three required parameters. It only loosely implies that credentialId refers to an env-var secret, but agentId, buildId, and credentialId are left entirely to inference from their names and UUID formats.
Input schemas describe structure but not intent. Descriptions should explain 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 ('Detach'), a specific resource ('env-var secret'), and a target ('from a revision'). This clearly distinguishes the tool from the sibling attachRevisionSecret and from detachRevisionLogin, which targets a different resource type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives relevant permission context (personal vs team-shared secrets) but never explicitly says when to prefer this tool over alternatives or when not to use it. The intended use is implied by 'Detach an env-var secret from a revision,' but no alternative routing or exclusion guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dismissClarityCaptureSuggestionDismiss Clarity Capture SuggestionAInspect
Dismiss a pending Process Landscape capture suggestion without creating a capture request (manager+).
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | ||
| suggestionId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations carry the base safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false), and the description adds useful context beyond them: the negative behavioral trait of not creating a capture request and the manager+ permission requirement. However, it does not disclose whether dismissal is reversible, what happens to the suggestion afterward, or the outcome of a repeat dismissal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence where every element earns its place: the action verb comes first, the resource is specific, the key non-behavior (no capture request created) is included, and the permission level is appended compactly. There is zero waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-UUID, no-output-schema tool, the description covers the action, the permission, and the defining negative behavior. What is missing is parameter clarification and any statement about reversibility or post-dismissal state. It is adequate but has clear gaps an agent would have to infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description bears the full burden of explaining nodeId and suggestionId, but it explains neither. The parameter names are mildly self-suggestive (a node and a suggestion UUID), yet nothing clarifies that nodeId refers to the Process Landscape node or which suggestion ID is expected. The description fails to compensate for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Dismiss), a specific resource (pending Process Landscape capture suggestion), and distinguishes this from the accept counterpart by noting it acts 'without creating a capture request.' An agent can immediately tell this tool rejects rather than accepts a suggestion, which differentiates it from acceptClarityCaptureSuggestion in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys clear context: use this when a pending Process Landscape capture suggestion should be dismissed rather than accepted, and the '(manager+)' qualifier establishes the required permission level. It does not explicitly name the alternative tool or state when not to use it, so it stops short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dismissClarityTeamAssignmentSuggestionDismiss Clarity Team Assignment SuggestionAInspect
Dismiss a pending Process Landscape team-assignment suggestion without changing the node's owner (manager+).
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | ||
| suggestionId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond the annotations, especially that the node's owner remains unchanged. It also indicates the suggestion must be pending, implying that non-pending or already-dismissed suggestions may not be valid inputs. It does not deeply explain all side effects, but the most important one is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every element—dismiss, pending, Process Landscape, team-assignment suggestion, node owner unchanged—earns its place and directly informs selection or invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter dismissal tool, the description covers the core purpose, the applicable state, and the most important non-effect (owner unchanged). It could additionally state what happens after dismissal or how to obtain valid IDs, but these are not critical gaps for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no descriptions, so the description must compensate. It references 'node's owner' and 'team-assignment suggestion,' which helps map nodeId and suggestionId, but it never explicitly defines either parameter. The parameter names are self-explanatory, but the description falls short of fully compensating for 0% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Dismiss') and a specific resource ('pending Process Landscape team-assignment suggestion'), and adds a key qualifier ('without changing the node's owner (manager+)'). This clearly distinguishes it from acceptClarityTeamAssignmentSuggestion and other dismiss 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 makes clear when to use the tool: when there is a pending team-assignment suggestion that should be discarded, not acted upon. It does not explicitly name alternatives like acceptClarityTeamAssignmentSuggestion, but the pending qualifier and the no-owner-change clause imply the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dismissNotificationDismiss NotificationAIdempotentInspect
Dismiss an important notification for the authenticated user, unpinning their own row from the Important section. Only important notifications (currently: connection_broken) can be dismissed. Idempotent. Requires the Notification Center feature; returns 404 when it is not enabled for the team.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The notification's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavior beyond the annotations: it unpins the user's own row, only works for important notifications, is idempotent, requires the Notification Center feature, and returns 404 when disabled. This clarifies side-effect scope and failure modes beyond what idempotentHint or destructiveHint alone 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?
Three tightly written sentences lead with the primary action and effect, then add restrictions and error behavior. There is no filler or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter mutation with no output schema, the description covers the action, scope, applicable notification type, idempotency, feature dependency, and failure response. The agent has enough context 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 schema already fully documents the single id parameter with format, pattern, and description, so schema coverage is 100%. The tool description adds no extra parameter-level semantics, which matches the baseline score of 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: dismissing an important notification and unpinning the authenticated user's own row from the Important section. It clearly distinguishes this from sibling notification tools like markNotificationRead or deleteAllNotifications by narrowing scope to important notifications 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?
It explicitly states that only important notifications (currently connection_broken) can be dismissed, which is a clear when-not condition. It also mentions the Notification Center feature prerequisite and the 404 error case, but it does not name alternative sibling tools for handling regular notifications.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
downloadSkillDownload SkillARead-onlyIdempotentInspect
Download a custom skill as a ZIP archive. Only custom (team-owned) skills can be downloaded.
| Name | Required | Description | Default |
|---|---|---|---|
| skill_id | Yes | Skill ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly, idempotent, and non-destructive behavior. The description adds the output format (ZIP archive), which is useful context. It does not contradict the annotations and covers the primary behavioral detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no fluff. It states the purpose and the key constraint (custom-only) efficiently, making it 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 download operation with a single parameter, the description is complete. It specifies the output format and the condition (custom-only), which is sufficient for an agent to decide and invoke correctly without further details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides format and pattern for skill_id. The description's mention of 'custom skill' clarifies that skill_id should reference a custom (team-owned) skill, adding meaning beyond the bare 'Skill ID.' schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (download), the resource (custom skill), and the output format (ZIP archive). It also distinguishes from listSkills and getSkillFileContent by specifying the ZIP archive format and the custom-skill restriction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states a when-not condition: only custom (team-owned) skills can be downloaded. It implies when to use this tool (when a ZIP archive of a custom skill is needed) but does not explicitly mention alternative tools like getSkillFileContent for system skills, hence a slight deduction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
duplicateAgentDuplicate AgentAInspect
Duplicate an existing agent into a new agent named "Copy of ", carrying over its configuration. Use the include_* flags in the (optional) body to control what is copied; all default on except memory. Requires the Lead Builder team role or above.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | The ID of the agent to duplicate | |
| include_aop | No | Copy the agent's operating procedure (AOP) and its handover targets. Defaults to true. | |
| include_queue | No | Copy the assigned Queue. Defaults to true. | |
| include_memory | No | Copy what the agent has learned so far (its Memory). Defaults to false. Memory can only be copied from the Duvo app — requesting it here returns an error. | |
| include_plugins | No | Copy installed plugins. Defaults to true. | |
| include_connections | No | Copy connected accounts (Connections) and their selected tools. Defaults to true. | |
| include_skills_files | No | Copy attached Skills and Files. Defaults to true. | |
| include_logins_secrets | No | Copy saved Logins and Secrets. Defaults to true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide generic hints (readOnlyHint false, destructiveHint false), so the description adds meaningful behavioral context: the new agent's naming convention, that configuration is carried over, that all include flags default on except memory, and the required role of Lead Builder or above. This goes beyond the structured annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each with a distinct purpose: state the operation and naming, explain the include_* flags and defaults, and state the permission requirement. There is no filler or repetition of schema fields; the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter tool with no output schema, the description covers the core semantics, default behavior, and access control. It does not explicitly describe the return value or potential error cases, but the clear naming and include-flag guidance make it adequate for correct invocation in most scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already fully documents every parameter, including defaults for all include_* flags. The description's mention of include_* flags and 'all default on except memory' adds no semantic detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Duplicate'), the resource ('an existing agent'), and the exact outcome (a new agent named 'Copy of <name>'). This clearly distinguishes it from sibling tools like createAgent, updateAgent, and moveAgent without needing to inspect their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the intended use obvious: copy an existing agent with its configuration and control which parts are copied via the include_* flags. It does not explicitly name alternatives or state when not to use it, but the duplication semantics are clear enough to guide selection against createAgent or updateAgent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
duplicateClarityProcessDuplicate Clarity ProcessAInspect
Duplicate a Clarity process with its analysis, captures, message history, and, for v2 processes, its live current map and automation proposal. Requires a team manager role.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Source Clarity process id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a mutating operation (readOnlyHint=false, destructiveHint=false), and the description adds meaningful behavioral context: what data is included in the duplicate, a version-specific behavior for v2 processes, and the required team manager role. It does not state the outcome format or whether a new process ID is returned, but the role and content details go 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 a single well-structured sentence that front-loads the core action and resource, immediately follows with the key included contents, and adds the role requirement at the end. Every phrase provides useful information, 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?
Given the simple single-parameter schema and absence of an output schema, the description gives enough operational context: what is copied, the version-specific scope, and the permission requirement. It could be slightly more complete by noting what is returned or where the duplicate is created, but these are minor gaps for a straightforward duplication 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 schema covers the single parameter id with a description ('Source Clarity process id'), so the description does not need to add much. The description confirms the parameter refers to the process being duplicated, but it does not add additional semantic detail beyond what the schema already provides. This aligns with 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 uses the specific verb 'Duplicate' with the clear resource 'Clarity process' and enumerates exactly what gets copied: analysis, captures, message history, and for v2 processes, live current map and automation proposal. This distinguishes it from sibling tools like createClarityProcess, deleteClarityProcess, and duplicateAgent 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?
The description implies its use case clearly: when you need to duplicate an existing Clarity process and preserve its associated data. It also adds the role prerequisite 'Requires a team manager role.' However, it does not explicitly state when to use this tool over createClarityProcess or how it differs from other duplication tools such as duplicateAgent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
duplicatePulseDashboardDuplicate Pulse DashboardAInspect
Duplicate a Duvo Pulse dashboard, producing an idle clone of the current rendered dashboard. The conversation history, shares, and connections are not copied.
| Name | Required | Description | Default |
|---|---|---|---|
| artifactId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations only indicate that this is not read-only and not destructive. The description adds concrete side-effect detail by stating that conversation history, shares, and connections are not copied and that the clone is 'idle.' This goes beyond what the annotations already communicate.
Agents need to know what a tool does to the 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 action and scope front-loaded. The second sentence adds meaningful exclusions without unnecessary detail. 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 one-parameter mutation with no output schema, the description adequately covers what the tool produces and what is not carried over. It does not explain return values or how the clone is named, but those are not essential for invoking 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 description coverage is 0% and the description never mentions 'artifactId' or explicitly states that it identifies the source dashboard to duplicate. The single-parameter shape makes the role somewhat inferable, but the description does not compensate for the missing 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 clearly states the action ('Duplicate'), the resource ('Duvo Pulse dashboard'), and the expected result ('idle clone of the current rendered dashboard'). It also distinguishes this tool from other duplication siblings by specifying the dashboard resource and the non-copied elements.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 should be used when an existing Pulse dashboard needs to be cloned, but it does not explicitly say when not to use it or contrast it with related tools like createPulseDashboard or restorePulseDashboardVersion. No alternatives or exclusions are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
evaluateQueueAggregationEvaluate Queue AggregationAInspect
Evaluate an aggregation definition against the current data without persisting it.
| Name | Required | Description | Default |
|---|---|---|---|
| queue_id | Yes | The queue's unique identifier | |
| definition | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The only disclosed behavior is non-persistence of the definition; the tool does not say whether it modifies other state, whether the queue must exist, or whether evaluation has costs/limits. Annotations give readOnlyHint=false, so the description should take on more burden to clarify side effects, but it does not.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single well-formed sentence front-loads the action and immediately states the key non-persistence property. No filler or redundant restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a complex tool with a nested definition schema and no output schema, but the description does not mention what the evaluation returns, how errors are surfaced, or any prerequisite such as queue existence. The non-persistence note is useful, but a significant amount of operational context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema documents queue_id and the definition object's structure well, and the description clarifies that 'definition' is an aggregation definition. However, the description adds no meaning for queue_id or the semantics of measures/filters/dimensions beyond their names and enums.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Evaluate'), a resource ('an aggregation definition'), and a distinguishing scope ('against the current data without persisting it'). This clearly separates it from createQueueAggregation, getQueueAggregationResult, and refreshQueueAggregation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear context: use it for a dry-run evaluation of a definition before persistence. It does not explicitly name alternatives or exclusion cases, but the non-persistence wording makes the intended scenario obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
exportCasesExport CasesAInspect
Export a queue's cases, respecting the same status, severity, priority, label, date-range, and free-text filters as the list view. format: "json" (default) returns a re-importable JSON payload; format: "csv" returns a text/csv file with the columns id, title, status, priority, labels, created_at, updated_at, completed_at, postponed_to, data.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | json | |
| search | No | ||
| filters | No | ||
| sort_by | No | created_at | |
| queue_id | Yes | The queue's unique identifier | |
| sort_order | No | asc |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations are weak (all hints are false), so the description carries the burden of behavioral disclosure. It does well by explaining that filters are respected, JSON output is re-importable, and CSV output has a specific column set. It does not mention export limits or async behavior, but it adds meaningful context beyond the schema and annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two compact sentences with the core action front-loaded and no filler. Every clause adds operational value: what is exported, which filters apply, and what each format returns.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 six parameters and no output schema, the description covers the main invocation decisions: queue selection, format choice, filter parity with the list view, and CSV column layout. It leaves some gaps around JSON payload shape, sorting semantics, and export size limits, but it is largely sufficient for correct use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 17%, and the description compensates for the most important parameter, `format`, as well as giving conceptual meaning to the filter-related parameters by referencing list-view filters. However, `search`, `sort_by`, `sort_order`, and the nested filter fields are left largely to schema names and enums, so the compensation is only partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Export') and the resource ('a queue's cases'), and it names the concrete output formats. It does not explicitly contrast with sibling tools like listCases or searchCases, though 'export' makes the distinct purpose fairly evident.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 'respecting the same ... filters as the list view' implies when this tool is appropriate and ties it to list-view behavior. The format guidance also helps agents choose JSON vs CSV, but no alternative tool is named and there is no 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.
exportPulseDashboardHtmlExport Pulse Dashboard HtmlBRead-onlyIdempotentInspect
Render a Duvo Pulse dashboard to a self-contained static HTML snapshot (text/html, data baked in). 404 until the first generation turn has produced HTML; 409 for an openui dashboard, whose substrate this exporter cannot render.
| Name | Required | Description | Default |
|---|---|---|---|
| theme | No | light | |
| artifactId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds meaningful behavioral context by disclosing the 404 condition (no HTML produced yet) and the 409 condition (unrenderable openui dashboard), which go 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 compact and front-loaded with the primary action, followed by two important status-code caveats. It contains no filler, though the constraints could be slightly better organized for 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?
The description covers the core behavior and important error conditions, but it leaves gaps: it does not explain what 'openui dashboard' means, does not clarify the relationship to getPulseDashboardHtml, and does not mention how theme affects the output. These gaps matter for an agent deciding whether and how to call this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description should compensate by explaining artifactId and theme meanings. It does not mention either parameter, leaving artifactId's role implicit and theme's effect on the rendered HTML undocumented. Parameter names help somewhat, but the description adds no real semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool renders a Duvo Pulse dashboard into a self-contained static HTML snapshot with data baked in. It identifies the resource and the output format, though it does not explicitly differentiate itself from sibling tools like getPulseDashboardHtml or getPulseDashboardPdf.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives such as getPulseDashboardHtml or getPulseDashboardVersionHtml. The 404 and 409 notes describe preconditions and failure cases, but they do not help an agent choose between sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fileSuggestedClarityProcessesFile Suggested Clarity ProcessesAInspect
File every unfiled process the viewer can see into its suggested folder
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotation contradiction: the description says a mutating action while annotations set readOnlyHint=false. It adds useful scope (bulk, only visible, only unfiled, destination is suggested folder) beyond the annotations, but doesn't disclose possible partial failures, reversibility, or the effect on already-filed processes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that states the action, scope, and destination with no filler. Every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-optional-parameter tool with no output schema, the description gives enough to invoke correctly. It could add a note about mass execution or confirmation behavior, but nothing critical is missing for 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 only parameter, team_id, is fully described in the schema including fallback and OAuth behavior. With 100% schema description coverage, the description doesn't need to add parameter details; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('File'), a bounded resource ('every unfiled process the viewer can see'), and the destination ('its suggested folder'). This clearly distinguishes it from per-suggestion accept/dismiss tools and manual move operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 'every unfiled process the viewer can see' gives an implicit trigger condition for using this bulk filing tool, but it does not explicitly contrast with alternatives like acceptClarityCaptureSuggestion, dismissClarityCaptureSuggestion, or moveClarityProcessesToFolder. An agent has to infer when to choose this over those siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
finalizeCaseAttachmentFinalize Case AttachmentAInspect
Confirm an uploaded case attachment against storage. Answers with the attachment in its settled state — ready when the bytes are present, failed (with a reason) when the upload never completed.
| Name | Required | Description | Default |
|---|---|---|---|
| case_id | Yes | The case's unique identifier | |
| queue_id | Yes | The queue's unique identifier | |
| attachment_id | Yes | The attachment's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
It discloses the operation's outcome semantics—ready when bytes exist, failed with a reason when the upload never completed—beyond the raw annotation flags. It does not detail side effects or authorization requirements, but no contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences front-load the main action and then specify the outcome states. No filler or repetition of schema fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter tool with no output schema, the description adequately explains the return semantics and the purpose. It could add the ordering relative to createCaseAttachmentUploadUrl, but the core calling context is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the three UUID parameters are already fully documented. The description adds no parameter-specific meaning, so it earns the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action ('Confirm an uploaded case attachment against storage') and the concrete output states ('ready'/'failed'). This distinguishes it from sibling upload, download, and listing tools 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 context is clear: use it after an upload to verify that the bytes are present and settled, and interpret the ready/failed response. It does not explicitly name alternatives or state when not to use it, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
finalizeClarityOrganizationInterviewFinalize Clarity Organization InterviewAInspect
Manually mark an in-progress organization interview as complete without requiring final media uploads
| Name | Required | Description | Default |
|---|---|---|---|
| orgId | Yes | ||
| interviewId | Yes | The organization interview ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful behavioral context beyond the annotations by noting this is a manual override that does not require final media uploads. However, it does not disclose side effects, such as whether the interview becomes immutable, whether this action can be reversed, or what happens if the interview is already complete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. Every phrase—'manually', 'in-progress', 'as complete', 'without requiring final media uploads'—adds meaningful detail that helps an agent understand the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter state-transition tool with no output schema, the description captures the core action and the key condition. Yet it omits details an agent might need, such as the success/return behavior, whether finalizing is irreversible, and any validation constraints beyond the interview being in-progress.
Complex tools with many parameters or behaviors need more documentation. 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 documents 'interviewId' but leaves 'orgId' completely undescribed, and the description does not compensate by explaining the role of either parameter. The phrase 'organization interview' hints at the resource type, but the description adds no meaning beyond the property names and the one existing schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('mark as complete'), a specific resource ('organization interview'), and a distinctive condition ('without requiring final media uploads'). This clearly differentiates it from related tools like updateClarityOrganizationInterview or the upload-completion flow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: this is for manually finalizing an in-progress interview, bypassing the usual media upload requirement. However, it does not explicitly state when not to use it or name alternatives, such as updateClarityOrganizationInterview for other edits or the normal upload-based completion path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generateClarityPortfolioIntelligenceGenerate Clarity Portfolio IntelligenceAInspect
Generate portfolio intelligence from all completed clarity processes. Returns 202 Accepted immediately and processes in background.
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as non-read-only and non-idempotent; the description adds the valuable behavioral detail that it returns 202 Accepted immediately and does the work asynchronously. This tells the agent not to expect a synchronous payload. It doesn't contradict any annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One tight sentence with the action front-loaded and the async behavior in a short second clause. 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 an async one-parameter action with annotations and a fully documented schema, the description covers the key invocation behavior (accepted immediately, background processing). It could improve by pointing to getClarityPortfolioIntelligence for later retrieval, but the sibling name makes that inferable, so the gap is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, team_id, has a full schema description covering UUID format, the API-key vs OAuth behavior, and fallback semantics. With 100% schema coverage, the description does not need to add parameter details, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Generate') with a distinct resource ('portfolio intelligence') and a clear source scope ('from all completed clarity processes'). This separates it from sibling retrieval tool getClarityPortfolioIntelligence and from generateClarityProcessLandscape/Snapshot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 indicates when it is relevant (intelligence over completed clarity processes) and sets expectations for an async fire-and-forget call (202, background processing). However, it does not explicitly contrast with getClarityPortfolioIntelligence for retrieving results or state when not to call it, so the guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generateClarityProcessLandscapeGenerate Clarity Process LandscapeBInspect
Start a process-landscape generation run for the organization from its eligible Clarity captures (organization executives and owners)
| Name | Required | Description | Default |
|---|---|---|---|
| orgId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey that this is not read-only, not idempotent, and not destructive; the description adds that the run draws on eligible captures from organization executives/owners, which is useful scoping. It does not disclose side effects, return value, or async behavior, but the annotation set lowers the burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the core action, and no filler. The parenthetical 'organization executives and owners' is compact but slightly ambiguous, so it is not a perfect 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 does not state what the tool returns, whether the generation run is asynchronous, how the agent can monitor or retrieve the result, or what prerequisites must be true before starting. For a low-complexity tool with no output schema, this leaves meaningful gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With a single parameter (orgId) and 0% schema description coverage, the description only indirectly maps to it by saying 'for the organization.' This gives the agent the basic semantic link but does not explicitly explain orgId format, source, or how it affects eligibility.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Start') and a specific resource ('process-landscape generation run'), and it adds an input source ('eligible Clarity captures'), so an agent can tell this is the initiating tool for landscape generation rather than, say, getClarityProcessLandscape. It does not explicitly name or differentiate against a sibling like generateClarityProcessSnapshot, which would push it to a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context is clear: it is used to start a landscape-generation run for an organization based on eligible Clarity captures. However, it gives no explicit when-to-use vs alternatives, no preconditions beyond eligibility, and no mention of when a different generation or snapshot tool should be chosen.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generateClarityProcessSnapshotGenerate Clarity Process SnapshotAInspect
Trigger a snapshot generation pipeline for a v2 clarity process, selected by kind. current_process runs the generateCurrentProcess pipeline (body fields are proposal-only and rejected); transformation_proposal runs the generate or regenerate proposal pipeline. Returns 202 immediately and finalises asynchronously via the cc-server webhook stream.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Snapshot kind to list | |
| process_id | Yes | The clarity process id | |
| custom_guidance | No | Automation proposals only: optional freeform guidance for this generation. Used as high-priority design guidance, not source-of-truth evidence. | |
| regenerate_from | No | Automation proposals only: id of a prior proposal snapshot to refine. When supplied, runs the regenerate pipeline using that proposal's current-process snapshot as the anchor and the extra captures collected since. | |
| source_snapshot_id | No | Automation proposals only: id of the current-process snapshot to anchor the new proposal to. Defaults to the latest snapshot for the process. | |
| transformation_aggressiveness | No | Automation proposals only: controls how much the generated proposal should change the current process structure. | aggressive |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses important behavioral traits beyond the annotations: it returns 202 immediately, finalises asynchronously via the cc-server webhook stream, and rejects proposal-only body fields for current_process. Since the annotations provide only false hints (not read-only, not idempotent, not destructive), the description carries the burden and does so effectively.
Agents need to know what a tool does to the 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 the core operation, the second disambiguates the two kind branches and their constraints, and the third communicates the asynchronous behavior. Despite the semantic complexity, the description is compact and front-loaded with the primary verb and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex, asynchronous, two-mode tool with no output schema, this is largely complete: it explains the immediate response, the async completion path, the kind-dependent behavior, and the proposal-only field restrictions. It could go further by describing what the webhook payload contains or how to correlate the resulting snapshot, but the essential calling context is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents all six parameters with good coverage, so the baseline is 3. The description adds real value by clarifying that kind selects two different pipelines and that certain fields are proposal-only and rejected for current_process. It also meaningfully supplements the schema's weak kind description ('Snapshot kind to list'), making the parameter semantics clearer than 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 states a specific action ('Trigger a snapshot generation pipeline') with a clearly identified resource ('v2 clarity process') and selection mechanism ('selected by kind'). It also names the two distinct pipeline branches, current_process and transformation_proposal, so an agent can distinguish this from related snapshot tools like getClarityProcessSnapshot, listClarityProcessSnapshots, or promoteClarityProcessSnapshot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 explains when each kind should be used and warns that proposal-only body fields are rejected for current_process. However, it does not explicitly name alternative tools or state when to use something else, such as getClarityProcessSnapshot for reading an existing snapshot or postprocessClaritySnapshot for later processing. The context is clear but lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getAgentGet AgentBRead-onlyIdempotentInspect
Get an agent by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | The agent's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds no behavioral detail beyond what annotations provide—such as what happens when the agent is not found, whether the full agent object is returned, or any permission requirements. It does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It is appropriately concise for a simple read operation, though it could have included a brief phrase about return value or use case without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity, one required parameter, and strong annotations, the description is largely sufficient for an agent to select and invoke it. The only minor gap is the lack of explicit statement about the return value or not-found behavior, but this is 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?
The input schema has 100% description coverage, with agent_id fully documented as a UUID. The description's 'by ID' phrase aligns with the schema but adds no new semantic detail. Baseline 3 is appropriate because the schema carries the parameter documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get an agent by ID' clearly specifies the verb (get), the resource (agent), and the scoping mechanism (by ID). It distinguishes itself from related siblings like createAgent, updateAgent, deleteAgent, and listAgents, and from other getters like getAgentCaseTrigger and getAgentMemoryFile.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives. It does not mention that this is for retrieving a single agent when its ID is already known, nor does it point to listAgents for browsing or searching. Context must be inferred entirely from the tool name and parameter schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getAgentCaseTriggerGet Agent Case TriggerARead-onlyIdempotentInspect
Retrieve a single case trigger by id.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | The agent's unique identifier | |
| trigger_id | Yes | The case trigger's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description does not need to re-state safety. The description adds no extra behavioral context beyond 'retrieve a single... by id', such as whether a missing trigger yields a 404 or whether the agent_id is scoped to the caller's organization. With no contradiction and no additional disclosure burden, a 3 reflects that the description is adequate but adds minimal behavioral value over 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, short sentence that conveys the essential operation without any filler or redundant detail. It is appropriately front-loaded with the action verb, and every word earns its place. There is no reason to expand it further.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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-by-id tool with two required UUID parameters, full schema coverage, and annotations covering idempotency and non-destructiveness, the description plus schema and annotations are nearly complete. The only minor gap is that the tool does not have an output schema, and the description does not state what the returned trigger object looks like or whether it includes nested fields, so an agent must infer the return shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: both agent_id and trigger_id have UUID format and pattern constraints plus descriptive text ('The agent's unique identifier', 'The case trigger's unique identifier'). The description itself references 'by id', which aligns with the trigger_id parameter. Since the schema fully documents both parameters, the description does not need to add more; the naming and formats make the semantics unambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Retrieve a single case trigger by id' clearly identifies the verb (retrieve), resource (case trigger), and lookup key (id). It stands apart from CRUD siblings like createAgentCaseTrigger, updateAgentCaseTrigger, and deleteAgentCaseTrigger, but does not explicitly distinguish itself from listAgentCaseTriggers or listAgentTriggers, so it loses a point for not naming those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a read-only lookup use case, and annotations confirm it is idempotent and non-destructive. However, it provides no explicit guidance on when to choose this tool over listAgentCaseTriggers (e.g., when you need a single trigger rather than all triggers for an agent), nor does it mention that agent_id and trigger_id are both required. The usage context is reasonable but not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getAgentMemoryFileGet Agent Memory FileARead-onlyIdempotentInspect
Get the contents of a single memory file for an agent.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Relative path to the memory file, e.g. notes.md or context/customer.md | |
| agent_id | Yes | The agent's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds no behavioral details beyond that, such as what happens for a missing file, authentication requirements, or whether the returned contents are raw text.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler. Every word contributes to identifying the operation and its 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 two required parameters, full schema coverage, and rich annotations, this description is sufficient. The agent knows what the tool does, which agent and file path to provide, and that the operation is safe and idempotent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already well documented in the schema. The description only adds the general context of reading a memory file, which does not meaningfully extend the parameter semantics beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and a precise resource ('contents of a single memory file for an agent'). The phrase 'single memory file' distinguishes it from sibling listAgentMemoryFiles and related file-content tools, making the tool's scope immediately clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to choose this tool over alternatives such as listAgentMemoryFiles, getFileContent, or getSkillFileContent. The description states what the tool does but provides no context, prerequisites, or exclusions to help an agent decide between related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getAgentSuggestionGet Agent SuggestionARead-onlyIdempotentInspect
Fetch a single suggestion. Poll this after a 202 from consume: an AOP apply in flight reports payload.apply.state (running/failed); once consumed, applied_revision_id carries the draft revision the change was staged onto.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The suggestion's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the readOnly/idempotent annotations by explaining the stateful polling behavior: an in-flight AOP apply reports payload.apply.state as running/failed, and once consumed, applied_revision_id carries the staged draft revision. This gives the agent meaningful expectations about response states without an output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loads the core action, and packs the essential state-transition guidance into a compact form. Every phrase earns its place without fluff or repetition of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only fetch with one well-documented parameter, the description supplies the key missing context: when to poll, what states to expect, and what the consumed result means. It is slightly implicit about using the suggestion id returned by consume, but overall it is complete enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for the single id parameter, describing it as 'The suggestion's unique identifier.' The tool description adds no new parameter meaning, but the schema already carries that burden, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Fetch a single suggestion,' which immediately distinguishes it from list-oriented tools like listAgentSuggestions and from mutating tools like consumeAgentSuggestion. The additional polling context reinforces its specific role in the suggestion lifecycle.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 a clear usage trigger: 'Poll this after a 202 from consume,' telling an agent exactly when to call this tool. It does not explicitly name alternatives or state when-not-to-use, but the context is strong enough to route an agent correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getAutomationGet AutomationARead-onlyIdempotentInspect
Get a single automation with its agent and queue counts, and the tab arrangement its detail view navigates by.
| Name | Required | Description | Default |
|---|---|---|---|
| automation_id | Yes | Automation ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is clear without description-level disclosure. The description adds useful payload context (counts and tab arrangement) but does not disclose error behavior, such as what happens when automation_id does not exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence with no filler, and the core action and scope are front-loaded before the return details. Every phrase adds either selection or invocation 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 one-parameter read-only tool with robust annotations and no output schema, the description adequately tells the agent what will be returned. It could be slightly more complete by stating not-found behavior, but the low complexity and strong schema keep that gap minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter automation_id is fully documented in the schema with type, format, pattern, and a short description, so schema coverage is 100%. The tool description adds no extra parameter guidance, matching the baseline for fully schema-documented parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and resource ('a single automation') and enumerates concrete return aspects: agent counts, queue counts, and the tab arrangement for its detail view. This distinguishes it from listAutomations (plural) and from getAutomationTabs, which covers only the tab portion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance is provided, and no sibling alternatives are named. The word 'single' implies use for one specific automation instead of listAutomations, but the choice between getAutomation and getAutomationCurrent/getAutomationTabs is left to the agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getAutomationCurrentGet Automation CurrentARead-onlyIdempotentInspect
Get what the automation is set up to do right now: its member agents with the builds that are live, its queues' routing, and the triggers and schedules firing for it. The revision-less counterpart of the revision detail — an automation without revisions is read here.
| Name | Required | Description | Default |
|---|---|---|---|
| automation_id | Yes | Automation ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds useful behavioral context by emphasizing 'right now,' 'live' builds, and 'firing' triggers/schedules, making clear this returns the effective current configuration rather than a static historical record.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: the first front-loads the verb and resource and gives a precise inventory of returned content, and the second adds the revision relationship. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has one well-documented parameter, no output schema, and comprehensive safety annotations, the description is complete enough. It explains what the tool returns and the revision-less scenario where it applies.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the single required parameter automation_id is already described in the schema. The description does not add meaning beyond the schema, which matches the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get what the automation is set up to do right now,' and enumerates the concrete contents: member agents, live builds, queue routing, triggers, and schedules. It also distinguishes itself as the 'revision-less counterpart of the revision detail,' separating it from revision-focused reads.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 contextual guidance: this is the current-state read, particularly relevant when 'an automation without revisions is read here.' It does not explicitly name sibling alternatives like getAutomation or getAutomationCurrentFlow, but the revision relationship provides useful selection context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getAutomationCurrentFlowGet Automation Current FlowARead-onlyIdempotentInspect
Get the automation's flow graph as it stands right now: the agents and queues it currently wires together, plus the producer, consumer, and handover edges between them. The revision-less counterpart of the revision flow.
| Name | Required | Description | Default |
|---|---|---|---|
| automation_id | Yes | Automation ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds behavioral context beyond that by clarifying the response is the current live graph and describing its structural contents. No contradiction exists between description and annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The first sentence front-loads the primary purpose and result contents; the second sentence adds a useful distinguishing qualifier. Every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one well-documented parameter and no output schema, the description sufficiently explains what the result will contain: a flow graph with agents, queues, and edge types. The annotations cover safety and idempotence, and the revision-flow comparison covers positioning, so nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with the single parameter automation_id already documented by name, type, format, and pattern. The description does not need to add parameter details; baseline 3 is appropriate because the schema carries the semantic weight and no additional parameter nuance is required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Get') and a specific resource ('the automation's flow graph'), then defines exactly what that includes: agents, queues, and producer/consumer/handover edges. It also distinguishes itself as 'the revision-less counterpart of the revision flow,' which helps separate it from sibling tools like getAutomation and getRevision.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 'as it stands right now' and 'revision-less counterpart of the revision flow' provide clear context for when to use this tool: when the current live flow graph is needed rather than a revision-specific view. It does not explicitly name alternative tools, but the revision-flow comparison gives practical routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getAutomationTabsGet Automation TabsARead-onlyIdempotentInspect
Get the automation detail view's tab arrangement, plus metadata for the Pulse dashboards pinned into it. Pinned dashboards are filtered to the ones the calling identity may see.
| Name | Required | Description | Default |
|---|---|---|---|
| automation_id | Yes | Automation ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior. The description adds one useful behavioral trait beyond those: pinned dashboards are filtered by the calling identity's visibility, which is important context an agent could not infer from the schema or annotations. It does not detail return-value shape, but the most safety-relevant behavior is covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences carry the full purpose: main resource, additional returned data, and an important filtering caveat. It is front-loaded with the primary action and contains no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only tool, the description covers the input (through schema), the output at a useful level (tab arrangement plus each pinned dashboard's metadata), and a visibility filter that affects the result set. No output schema exists, but the high-level return contract is sufficient 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?
Schema coverage is 100% for the single required automation_id parameter, which already documents its type, format, and meaning. The description adds no param-specific syntax or context, so it warrants the baseline 3 rather than more.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 precise verb-resource pair: it retrieves the automation detail view's tab arrangement plus metadata for pinned Pulse dashboards. It also adds a distinguishing scoping detail (dashboards are filtered by what the caller may see), which separates it from generic getAutomation or listPulseDashboards calls.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 communicates what this tool returns, so an agent can infer it is the right choice when it needs automation detail tab layout or pinned Pulse dashboard metadata. It does not explicitly identify sibling alternatives or state when not to use it, but the content is specific enough to avoid obvious confusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getBatchQueueStatsGet Batch Queue StatsARead-onlyIdempotentInspect
Get case status counts for many Queues in ONE call. Use this after listQueues whenever you need per-Queue counts — cases waiting on a human, needing review, pending, failed — instead of calling listCases or searchCases once per Queue. Results are keyed by Queue ID and include zero counts for Queues with no matching cases; Queue IDs from other teams are silently dropped. For a count on a single Queue with richer filters, listCases with count_only=true is the alternative.
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| queue_ids | Yes | Comma-separated Queue IDs to aggregate. Include 1 to 100 IDs from the team in the URL. | |
| created_at_to | No | Exclusive case creation upper bound. Use an ISO 8601 timestamp or a relative duration such as 7d or 12h. Omit it for no upper bound. | |
| created_at_from | No | Inclusive case creation lower bound. Use an ISO 8601 timestamp or a relative duration such as 7d or 12h. Omit it for no lower bound. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/destructive annotations, the description discloses important behaviors: results are keyed by Queue ID, Queues with no matches get zero counts, and Queue IDs from other teams are silently dropped. This prevents an agent from assuming errors or missing results in those 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?
Four sentences, each carrying distinct value: what it does, when to use it, what the results look like, and when to use the alternative. The most important scoping fact is front-loaded, and there is 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?
With no output schema present, the description compensates by explaining the response shape: counts keyed by Queue ID, including zero counts. It also covers the auth/team scoping caveat implicitly via the silently-dropped-other-team-IDs note and gives a clear routing alternative, so an agent can 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?
Schema coverage is 100%, so the schema already documents queue_ids, team_id, and the date-range parameters. The description adds context about batching and queue scoping, but it does not need to explain parameter formats, and it does not substantially extend the schema's per-parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb, resource, and scope: 'Get case status counts for many Queues in ONE call.' It clearly differentiates itself from siblings like listCases, searchCases, and listQueues by emphasizing batched per-Queue counts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 to use this 'after listQueues whenever you need per-Queue counts' instead of calling listCases or searchCases once per Queue. It also names the alternative for single-Queue counts: 'listCases with count_only=true is the alternative.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getCaseGet CaseARead-onlyIdempotentInspect
Get a case by ID. Returns the case, its event history, and every case-approval batch ever created on the case (newest first).
| Name | Required | Description | Default |
|---|---|---|---|
| case_id | Yes | The case's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds useful behavioral detail beyond that by specifying that the response includes the complete event history and every approval batch, with newest-first ordering.
Agents need to know what a tool does to the 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 compact sentences: the first states the core operation, the second lists the return contents and ordering. Every word earns its place, with no repetition of schema or annotation details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only getter with rich annotations and full schema coverage, the description is complete. It compensates for the lack of an output schema by naming exactly what the caller receives, including ordering.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully documents case_id as a UUID unique identifier with 100% coverage. The description only says 'by ID' and does not add new parameter semantics beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Get'), a specific resource ('a case by ID'), and the unique return payload: the case, its event history, and all approval batches newest-first. This clearly distinguishes getCase from sibling list/search case 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 makes the usage context clear: call this when you have a case ID and need the full case record with its history and approval batches. It does not explicitly name alternatives like searchCases or listCases, but the by-ID and return-scope wording is enough to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getCaseAttachmentDownloadUrlGet Case Attachment Download UrlARead-onlyIdempotentInspect
Mint a short-lived signed URL for one case attachment. disposition=inline serves the file for the in-app viewer; attachment forces a download.
| Name | Required | Description | Default |
|---|---|---|---|
| case_id | Yes | The case's unique identifier | |
| queue_id | Yes | The queue's unique identifier | |
| disposition | No | attachment | |
| attachment_id | Yes | The attachment's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish this as a safe, read-only, idempotent operation, so the bar is lower. The description adds valuable behavioral context beyond annotations: the URL is 'short-lived' and 'signed', which implies expiration and authentication requirements. It also explains the behavioral difference between inline serving and forced download, which is not captured in the schema or 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, no filler. The primary action is front-loaded, and the disposition clarification is the only additional detail included. 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 read-only tool with annotations covering safety and a schema covering parameter semantics, the description is nearly complete. It implies the return value is a URL and discloses the short-lived signed nature. The only minor gap is not specifying the exact response shape or URL expiration duration, but there is no output schema expecting that elaboration.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, and the description compensates for the one undocumented parameter ('disposition') by explaining the meaning and effect of both enum values. The other parameters are already well-described in the schema with UUID format and role-specific descriptions, so the marginal value added by the description is appropriately targeted at the gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Mint'), a precise resource ('one case attachment'), and the output ('short-lived signed URL'), which clearly distinguishes it from sibling tools like getFileDownloadUrl or getPulseDashboardAttachmentDownloadUrl. The additional disposition explanation further clarifies the tool's two modes of 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 gives clear context for when to use the tool: to obtain a download URL for a single case attachment. It also explains how to choose between 'inline' and 'attachment' disposition values, which is practical usage guidance. It does not explicitly name alternative tools or exclusion criteria, but the resource-specific scoping makes the intended use obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getCaseQueueEvalRubricsGet Case Queue Eval RubricsARead-onlyIdempotentInspect
List a queue's active case-level evaluation rubrics — the Pass/Fail questions a whole case is judged against at settlement. Shows the queue's current version's set (auto-generated from the connected Assignments' AOPs, plus any manually-authored rubrics).
| Name | Required | Description | Default |
|---|---|---|---|
| queue_id | Yes | The queue's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the description does not need to re-state safety. It adds useful behavioral context by explaining the set is auto-generated from connected Assignments' AOPs plus manually-authored rubrics, and that it reflects the queue's current version.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The core action and resource are front-loaded, and the second sentence adds necessary context about the composition of the rubrics without 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 read-only list operation with one parameter and no output schema, the description covers what is returned (active case-level rubrics, current version set, auto-generated plus manual). It could mention edge cases like an empty queue or missing version, but the core context needed to call the tool correctly is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with queue_id fully documented as 'The queue's unique identifier.' The description reinforces that the scope is queue-specific but adds no material semantics beyond what the schema already provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('List') and a precise resource: a queue's active case-level evaluation rubrics. It further clarifies what those rubrics are (Pass/Fail questions judged at settlement) and distinguishes them from general eval rubrics by the 'case-level' and 'queue' qualifiers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when this tool is appropriate: whenever an agent needs a queue's case-level eval rubrics. It does not explicitly name alternative tools like getEvalRubrics or createCaseQueueEvalRubric, nor does it state when not to use it, but the context is clear enough for an agent to select it correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getClarityArtifactChatMessagesGet Clarity Artifact Chat MessagesARead-onlyIdempotentInspect
Load the latest artifact-chat messages for one active conversation, returned oldest-first.
| Name | Required | Description | Default |
|---|---|---|---|
| process_id | Yes | The Clarity process id | |
| conversation_id | Yes | The artifact-chat conversation id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds meaningful behavioral context by specifying that it returns the latest messages and orders them oldest-first, and that the conversation must be active.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the action and includes the key constraints: latest messages, one conversation, active state, and ordering. 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 low-complexity read operation with full schema coverage and safety annotations, the description is sufficient. It names the resource, ordering, and active-conversation requirement; pagination limits and exact response fields are not described but are not critical for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both process_id and conversation_id already clearly documented. The description adds little parameter-level meaning beyond naming the target conversation, but the schema carries the burden adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Load') with a clear resource ('artifact-chat messages') and scope ('one active conversation'). It is easily distinguished from sibling tools like listClarityArtifactChatConversations because it targets messages within a single conversation rather than listing conversations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 the context: loading messages for one active conversation. It does not explicitly name alternative tools or exclusion conditions, but the scope is specific enough that an agent can infer when this tool applies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getClarityCaptureGet Clarity CaptureARead-onlyIdempotentInspect
Get a single Clarity v2 capture including full transcript and video transcript. Use this when the process was loaded with captures=lite, or when only one capture's transcript is needed.
| Name | Required | Description | Default |
|---|---|---|---|
| capture_id | Yes | The capture id | |
| process_id | Yes | The clarity process id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context by stating the returned capture includes full transcript and video transcript, but it does not disclose other behavior such as response shape or error conditions. This is acceptable given the annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The first sentence states the action and returned content, and the second sentence gives concrete usage conditions. Information 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 simple read-only get-by-id tool with full schema documentation and safety annotations, the description is sufficiently complete. It explains what the tool returns and when to use it, which is enough for an agent to invoke it correctly. A slightly richer statement about the capture relationship to the process could help, but it is not a critical gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both capture_id and process_id documented in the input schema. The description adds no parameter-specific meaning beyond what the schema already provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: get a single Clarity v2 capture with full transcript and video transcript. It also signals the scope ('single') and distinguishes this from broader capture/process retrieval tools like listClarityProcessSnapshots or getClarityProcess, even without naming them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit conditions for use: when the process was loaded with captures=lite, or when only one capture's transcript is needed. It does not name specific alternative tools or state when not to use it, but the context is clear enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getClarityExportGet Clarity ExportCRead-onlyIdempotentInspect
Get a Clarity export run by ID
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, so the safety profile is covered. The description adds no behavioral context beyond the schema; it does not indicate what the response contains, whether a missing ID returns an error, or how this fits into the export workflow.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with zero wasted words, and the action 'Get' plus the resource 'Clarity export run' are front-loaded. This is appropriately concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool this is close, but with no output schema and no mention of what is returned or how the ID is obtained, an agent cannot fully predict the call's behavior. It should reference startClarityExport or listActiveClarityExports for context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description needed to compensate for the id parameter's meaning. Saying 'by ID' adds little beyond the schema, and it does not clarify that the ID comes from starting a export or listing active exports.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Get a Clarity export run by ID'), making the lookup intent clear. However, it does not explicitly differentiate this from sibling tools like listActiveClarityExports or getRun, so it falls just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus startClarityExport or listActiveClarityExports. There is also no mention of prerequisites, such as obtaining an export run ID first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getClarityHierarchyPeopleGet Clarity Hierarchy PeopleARead-onlyIdempotentInspect
List the people attached to every authorized linked process node in the organization's Process Landscape. Returns a flat list where each person carries nodeId and processId, plus their role, invite status, and capture count. truncated is true when the node subtree or any single process roster was capped.
| Name | Required | Description | Default |
|---|---|---|---|
| orgId | Yes | ||
| rootId | No | Only return rosters for nodes in the subtree under this node |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds useful behavioral detail beyond annotations: it explains the flat-list output shape, role/invite/capture-count fields, and the truncated flag's meaning when subtrees or rosters are capped. This is strong extra context for a tool without an output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. It front-loads the action, then efficiently reports the output fields and the truncation behavior. Every sentence provides necessary selection and invocation information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only listing tool with two parameters and no output schema, the description covers the main return contract and truncation semantics. It lacks explicit guidance on what to do when truncated is true, but the core selection and invocation context 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?
Schema description coverage is only 50%: rootId has a clear description, but orgId does not. The description indirectly explains orgId via 'organization's Process Landscape' but does not add parameter-level details or explicitly mention rootId. This is adequate but does not fully compensate for the undocumented orgId 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 action and resource: 'List the people attached to every authorized linked process node in the organization's Process Landscape.' It also clarifies that the result is a flat list with nodeId and processId, which distinguishes it from sibling tools like getClarityProcessLandscape or listClarityLandscapeNodePeople.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when you need people across the entire process landscape hierarchy rather than a single node or process. However, it does not explicitly name alternatives or state exclusion criteria, so an agent must infer the boundary between this and similar list tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getClarityOrganizationInterviewGet Clarity Organization InterviewBRead-onlyIdempotentInspect
Load a single organization Clarity interview with transcript
| Name | Required | Description | Default |
|---|---|---|---|
| orgId | Yes | ||
| interviewId | Yes | The organization interview ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds the behavioral detail that the loaded interview includes its transcript, but discloses nothing else (auth requirements, error behavior, or response shape). This is acceptable for a safe read tool, so a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no filler, front-loading the action and resource before the payload detail. Every word earns its place; nothing is redundant with the annotations or 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 simple two-ID get-by-id tool with strong read-only/idempotent annotations and no output schema, the description is nearly sufficient: the required parameters are clearly constrained by the schema, and 'with transcript' hints at what the caller receives. The only modest gap is lack of guidance on listing interviews first or confirming the interview belongs to the org, but neither is critical for a correct call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50%: interviewId has a schema description, but orgId has none. The tool description does not compensate — it never explains what orgId refers to, how the two identifiers relate, or any additional format/context beyond what the schema already provides. The description adds no real parameter-level meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Load'), a clear resource ('a single organization Clarity interview'), and a key scope qualifier ('single') that implicitly differentiates it from listClarityOrganizationInterviews. It also adds a useful payload detail ('with transcript'). It does not explicitly name sibling alternatives, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use case is implied — retrieve one specific interview by orgId and interviewId — and the word 'single' hints at the contrast with listing tools, but the description provides no explicit when-to-use guidance, no exclusions, and no named alternative. An agent must infer the routing from sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getClarityPortfolioIntelligenceGet Clarity Portfolio IntelligenceBRead-onlyIdempotentInspect
Get portfolio intelligence for the current team
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the 'current team' scope but does not disclose additional behavioral details such as output freshness, relationship to generated intelligence, or what happens when no intelligence exists. 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?
The description is a single, compact sentence with no wasted words. It front-loads the core operation and scope. It could be slightly more informative by clarifying what portfolio intelligence is, but as written it is concise and directly usable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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, yet the description does not explain what portfolio intelligence contains or what the agent should expect as a result. It also fails to address the existence of generateClarityPortfolioIntelligence, leaving a key ambiguity about when to retrieve versus generate. The team_id auth details are covered in the schema, but the domain-level context is incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the team_id parameter already has a thorough description covering omission, fallback to the API key's team, OAuth usage, and rejection of different teams. The tool description itself adds no parameter-level meaning, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'Get portfolio intelligence for the current team.' It is not a tautology and identifies the operation's scope. However, it does not define what 'portfolio intelligence' means or distinguish itself from the sibling tool generateClarityPortfolioIntelligence, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. In particular, there is a sibling tool named generateClarityPortfolioIntelligence, but the description never explains whether the agent should call get versus generate or under what conditions. The team_id schema description offers useful auth context, but this is not guidance about tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getClarityProcessGet Clarity ProcessARead-onlyIdempotentInspect
Get the v2 read model for a clarity process: the process row (with operational fields like generation_error, generation_progress, generation_started_at, generation_last_activity_at, custom_prompt), its captures, and the lightweight version arrays for both snapshot tabs. The full payload of any specific snapshot is fetched lazily via the unified per-snapshot detail endpoint (GET .../snapshots/:kind/:id); this read model deliberately doesn't carry it so the response stays small.
| Name | Required | Description | Default |
|---|---|---|---|
| captures | No | Capture payload mode. `full` (default) embeds each capture's transcript content. `lite` omits `transcript`/`videoTranscript` (returned as null) and relies on the `hasTranscript`/`hasVideoTranscript` flags; fetch content on demand via `GET .../captures/:capture_id`. | full |
| process_id | Yes | The clarity process id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description aligns with annotations (readOnlyHint, idempotent, non-destructive) and adds transparency by explaining that the response omits full snapshot payloads to keep the response small. This goes beyond the annotations and sets correct 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 two sentences, well-structured, and covers purpose, scope, and the lazy-loading caveat without redundancy. 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 the simple parameters and the description's detail about the response contents (process row, captures, version arrays), the agent has enough context to use the tool correctly. No output schema is present, but the description fills that gap adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description enriches the 'captures' parameter by explaining the 'full' vs 'lite' modes and their impact on transcript fields. This adds significant meaning beyond the raw enum values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 gets a v2 read model for a clarity process, specifying the contained fields (process row, captures, version arrays). It distinguishes itself from snapshot-specific tools like getClarityProcessSnapshot and getClarityProcessTree.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 mentions that full snapshot payloads are fetched lazily via a unified per-snapshot detail endpoint, guiding agents to use this tool for the lightweight read model rather than trying to retrieve heavy data here. This is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getClarityProcessInviteLinkGet Clarity Process Invite LinkARead-onlyIdempotentInspect
Get the active interview invite link for a process.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the 'active' qualifier, which provides some behavioral scoping, but it does not discuss expiration, auth requirements, or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every word contributes meaning, and it is appropriately concise for such a simple read-only tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only getter with no output schema, the description is complete enough. It identifies what is returned, the target process, and the active-link constraint; the return value is evident from the phrase 'invite link.'
Complex tools with many parameters or behaviors need more documentation. Simple 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 only says 'for a process,' which implies the required id identifies a process. It adds minimal meaning beyond the UUID schema field but does not explicitly describe the id's semantics or behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb (Get), resource (active interview invite link), and target (a process). It is unambiguous, but it does not explicitly distinguish itself from sibling tools like createClarityProcessLink or getClarityProcessJoinInfo.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus creating an invite link, retrieving process join information, or handling cases where no active link exists. The intended use is only implied by the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getClarityProcessJoinInfoGet Clarity Process Join InfoCRead-onlyIdempotentInspect
Get information about a clarity interview invite link (public).
| Name | Required | Description | Default |
|---|---|---|---|
| token | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds a small behavioral signal with '(public)', implying the invite link is publicly accessible and likely needs no special authentication, but it does not disclose what information is returned or any failure modes. This is modest added context 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 a single, front-loaded sentence with no filler or repetition. It is concise, though it is also somewhat under-specified; this keeps it from receiving a 5 because the brevity comes at the cost of useful param and output context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no parameter documentation in the schema, the description carries the burden of explaining what information is returned and what 'token' refers to. It does neither. For a tool that an agent must invoke with a required token, this leaves the agent guessing about both input and output expectations.
Complex tools with many parameters or behaviors need more documentation. 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 one required parameter, 'token', with no description, and schema description coverage is 0%. The tool description does not mention the token at all—neither its meaning, format, nor how to obtain it. The description completely fails to compensate for the schema's lack of 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 states a clear action and resource: 'Get information about a clarity interview invite link (public).' It is more than a tautology and immediately signals what the tool does, but it does not explicitly distinguish itself from closely related siblings like getClarityProcessInviteLink or acceptClarityProcessJoin.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 offers no guidance on when to use this tool versus alternatives such as getClarityProcessInviteLink, createClarityInviteLink, or acceptClarityProcessJoin. No context, prerequisites, or exclusions are provided, so the agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getClarityProcessLandscapeGet Clarity Process LandscapeBRead-onlyIdempotentInspect
Fetch the organization's full process landscape with process summaries, team assignments, and page-level stats
| Name | Required | Description | Default |
|---|---|---|---|
| orgId | Yes | ||
| rootId | No | ||
| teamId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is well covered. The description adds only what data is returned and does not disclose behavioral details such as filtering effects of rootId/teamId, pagination, rate limits, or response shape. It aligns with annotations, so no contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the verb and object, lists meaningful content components, and contains no filler. Every word contributes to communicating the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and no parameter descriptions, this description is thin. It names high-level return contents but does not explain optional parameters, response structure, or when to use this instead of closely related Clarity tools. An agent could make a basic call with orgId but would lack enough context to correctly use rootId/teamId or understand the full 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 schema has 3 parameters with 0% description coverage, and the description does not compensate. It indirectly associates orgId with 'organization,' but rootId and teamId are left entirely unexplained, forcing the agent to infer their semantics solely from their names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses a specific verb 'Fetch' and names the resource 'organization's full process landscape' with concrete contents: process summaries, team assignments, and page-level stats. It is clear, but it does not explicitly distinguish itself from related siblings like getClarityProcessTree, listClarityProcessSummaries, or generateClarityProcessLandscape.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'full process landscape' implies this is used when a broad org-wide view is needed, but no explicit when-to-use or when-not-to-use guidance is provided. The description does not mention alternatives or state exclusions, leaving the choice between this tool and similar Clarity read/list/generate tools to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getClarityProcessSharingGet Clarity Process SharingCRead-onlyIdempotentInspect
Get the sharing status for a clarity process
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Clarity process ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description only repeats the idea of 'Get' without adding behavioral context. It does not describe what 'sharing status' contains, whether it reflects computed or stored state, or how it relates to sharing mutations, so it adds no transparency beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It is concise and easy to parse, though it leans slightly under-specified rather than being a model of informative brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 rich annotations and a fully documented schema, the description is minimally viable for invoking the tool. However, it leaves the meaning of 'sharing status' ambiguous and provides no return-shape or usage context, which would matter given the absence of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% parameter coverage, including a clear description for the only parameter, id. The tool description adds no additional meaning about the parameter, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear verb (Get) and resource (sharing status for a clarity process), so an agent can tell this is a read operation targeted at sharing information. It does not explicitly distinguish itself from getClarityProcess, getClarityProcessInviteLink, or related siblings, but the phrase 'sharing status' narrows the purpose sufficiently.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance about when to use this tool instead of alternatives such as getClarityProcess, getClarityProcessInviteLink, or updateClarityProcessSharing. There is no mention of complementary tools, exclusions, or typical selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getClarityProcessSnapshotGet Clarity Process SnapshotBRead-onlyIdempotentInspect
Fetch the full payload for a Clarity v2 process snapshot of either kind.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Snapshot kind to list | |
| process_id | Yes | The clarity process id | |
| snapshot_id | Yes | Snapshot id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description's 'Fetch' is consistent with those. The description adds that the response is the 'full payload' and that it covers either snapshot kind, but it does not add deeper behavioral context such as authorization needs, snapshot lifecycle constraints, or return format caveats.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It clearly leads with the action and object, and every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only fetch with fully documented parameters and strong annotations, the description is mostly sufficient. 'Full payload' partially compensates for the lack of an output schema, though a little more context about how the two snapshot kinds differ or when a snapshot_id is valid would make it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so process_id, kind, and snapshot_id are already documented with types, formats, and enums. The description only reinforces the enum via 'of either kind' and adds no new parameter-level meaning, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Fetch') and a specific resource ('full payload for a Clarity v2 process snapshot'), and 'of either kind' maps to the two enum values. It does not explicitly differentiate from sibling tools like listClarityProcessSnapshots or generateClarityProcessSnapshot, but the focus on 'full payload' makes the purpose reasonably clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance about when to use this tool versus related snapshot tools such as listClarityProcessSnapshots, generateClarityProcessSnapshot, or promoteClarityProcessSnapshot. There are no exclusions, prerequisites, or alternative routing instructions, leaving usage entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getClarityProcessTreeGet Clarity Process TreeARead-onlyIdempotentInspect
Fetch the organization's process tree, or the subtree under rootId
| Name | Required | Description | Default |
|---|---|---|---|
| orgId | Yes | ||
| rootId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description need not re-establish safety. It adds meaningful behavioral context beyond annotations: supplying rootId returns a subtree rather than the full organization tree, which clarifies conditional behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. Every word contributes meaning: the verb, the resource, the scope, and the optional subtree behavior are all present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only retrieval tool with annotations covering safety and idempotency, the description explains the core selection behavior (full tree vs subtree). It does not describe the return shape, and there is no output schema, but the essential call semantics are adequately covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds semantics for rootId by explaining it selects a subtree, and 'organization's' implies orgId scoping. However, orgId is not explicitly named or described, and parameter-level details like optionality are only indirectly conveyed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Fetch') with a distinct resource ('the organization's process tree, or the subtree under rootId'), which clearly distinguishes it from closely named siblings like getClarityProcess, getClarityProcessLandscape, and listClarityProcesses. The optional subtree wording adds precision beyond the tool name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: use this when you need an organization's process tree or a subtree rooted at rootId. However, it provides no explicit guidance about when to prefer this over sibling tools such as getClarityProcess or listClarityProcesses, and it offers no exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getClarityTeamSettingsGet Clarity Team SettingsBRead-onlyIdempotentInspect
Get clarity team settings for financial calculations
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already disclose readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds only a purpose clause and no behavioral trait such as authentication requirements, response shape, or how team_id fallback works; that fallback behavior appears only in the parameter schema, not in the description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler. The verb and resource are front-loaded, and the 'for financial calculations' clause adds useful domain context without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, read-only tool with one well-documented optional parameter and strong annotations, the description is close to adequate. However, because there is no output schema, the description leaves the return shape implicit; an agent would benefit from knowing what settings are actually returned, such as rounding rules, currency, or calculation assumptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single optional parameter team_id is fully documented in the input schema, including UUID format, API-key vs OAuth behavior, and rejection of mismatched teams. Since schema description coverage is 100%, the description does not need to add parameter details, and the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get'), a specific resource ('clarity team settings'), and a domain purpose ('for financial calculations'). This is enough to distinguish it from write tools like updateClarityTeamSettings and from other getters, though it does not explicitly contrast with 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 phrase 'for financial calculations' gives a weak implied use context, suggesting the tool is relevant when financial calculation settings are needed. However, it does not explicitly say when to use this tool instead of updateClarityTeamSettings, getTeam, or other related getters, and no exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getConnectionGet ConnectionARead-onlyIdempotentInspect
Get one of your connections by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| connection_id | Yes | Connection ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds ownership scoping ('your connections') but does not disclose error behavior, response shape, or distinction from getConnectionCredentials. With annotations present, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with zero filler. Every word earns its place, and the description is appropriately sized for such a simple read operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only, idempotent lookup tool, the description plus schema and annotations covers what an agent needs to invoke it correctly. It could add a note about not returning credentials or about using listConnections for enumeration, but those are optional refinements rather than clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already fully documents connection_id as a required UUID. The description's 'by ID' restates that intent without adding meaning beyond the structured schema, matching the baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get'), resource ('connections'), and the selection mechanism ('by ID'). This clearly distinguishes it from listConnections and from create/update/delete variants, so an agent can select it confidently.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'by ID' implies this is for retrieving a single known connection, and 'your' scopes it to the user's own connections. However, it does not explicitly mention alternatives like listConnections or when to prefer those, so the guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getConnectionCredentialsGet Connection CredentialsARead-onlyIdempotentInspect
Get the header keys configured for a connection. Sensitive values (api keys, tokens, passwords) are returned as empty strings — the response only reveals which credential fields are set, never their values.
| Name | Required | Description | Default |
|---|---|---|---|
| connection_id | Yes | Connection ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavioral transparency by stating that sensitive values are returned as empty strings, revealing only which fields are set. This goes beyond the readOnlyHint annotation by explaining the exact output behavior. It also implies no side effects, consistent with the idempotent and non-destructive annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that efficiently conveys the purpose and key behavior. It avoids unnecessary details and is well-structured, making it easy for an agent to parse and understand the tool's functionality.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is fairly complete for its scope, explaining both the output (header keys) and the masking of sensitive values. However, it does not mention related tools or provide guidance on when to choose this over getConnection or getCredential, which could be beneficial context. Still, the core information needed for usage is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully describes the parameter with a 'Connection ID' description, and the tool description does not add further semantic detail. The parameter is a straightforward identifier, and the description provides no additional context about how it is used. Since schema coverage is 100%, the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to get the header keys configured for a connection. It explicitly distinguishes itself by noting that sensitive values are masked, which differentiates it from tools like getConnection that might return full details. The verb 'get' is specific and the resource 'connection' is identified.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool over alternatives like getConnection or getCredential. It implies usage when only header key names are needed, but does not provide explicit guidance or exclusion criteria. The behavioral note about masking sensitive values gives some context, but no direct comparison to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getCredentialGet credential by idBRead-onlyIdempotentInspect
Get a login by id. Returns the encrypted password/otp_secret blobs — only the owner or team members can access it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| userId | Yes | ||
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only, idempotent, and non-destructive; the description adds that returned blobs are encrypted and access is restricted to owner/team members. This is useful behavioral context beyond the annotations and does not contradict 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, compact sentence that front-loads the operation and includes the return payload and access restriction without filler. 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 read-only fetch with rich annotations, the description covers the return payload and access restrictions reasonably well. However, it omits what userId is for and does not describe error or not-found behavior, leaving some ambiguity for a three-parameter tool with no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33%, with team_id documented but userId and id left unexplained. The description adds only the generic phrase 'by id', leaving the required userId's purpose and its relationship to ownership ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get'), resource ('a login'/'credential'), and selection method ('by id'), and previews the sensitive payload. It is clear but does not explicitly differentiate it from siblings like getSecret or listCredentials.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 conveys an access precondition ('only the owner or team members can access it') and implies use when you already have a credential id. However, it does not say when to prefer listCredentials, getSecret, or other credential-related tools, and it offers no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getEvalRubricsGet Eval RubricsARead-onlyIdempotentInspect
List the evaluation rubrics a Run is scored against: the platform default rubrics plus the Agent-specific rubrics for a build. Defaults to the Agent's live build; pass build_id to target the revision a specific Run ran against.
| Name | Required | Description | Default |
|---|---|---|---|
| agentId | Yes | The agent's unique identifier (Assignment ID) | |
| build_id | No | Return rubrics for this specific build (the revision a Run ran against). Defaults to the agent's live build when omitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior. The description adds value by disclosing the result composition (default plus Agent-specific rubrics) and the default build-target behavior, which are not inferable 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?
Two tight sentences: the first states the core action and result contents, the second explains the default and the optional parameter. No filler or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, read-only list operation with two fully documented parameters and no output schema, the description covers the action, the returned composition, and the only subtle selection behavior (build default vs explicit build_id). Nothing needed for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents both UUID parameters. The description still adds meaning by explaining the conceptual role of build_id ('target the revision a specific Run ran against') and the default when it is omitted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names a specific verb ('List') and resource ('evaluation rubrics a Run is scored against'), and clarifies the result composition ('platform default rubrics plus the Agent-specific rubrics for a build'). This distinguishes it from nearby eval/scores/queue-rubric tools and leaves no ambiguity about what is returned.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete usage guidance: omit build_id for the Agent's live build, or pass build_id to target the revision a specific Run ran against. It does not explicitly name sibling alternatives or exclusions, so it falls short of a 5, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getEvalScoresGet Eval ScoresARead-onlyIdempotentInspect
Aggregate evaluation counts and flag distribution for an Assignment's Jobs since the given timestamp.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | When 'custom', only counts Jobs scored against the target revision's custom rubrics, and only `custom__*` rubric flags. Defaults to 'all' (platform + custom rubrics). | |
| since | Yes | ISO 8601 timestamp; only Jobs evaluated after this are counted | |
| agentId | Yes | The agent's unique identifier (Assignment ID) | |
| revision_id | No | Target a specific Assignment revision instead of the live revision. Only honoured when scope='custom' — non-custom scopes aggregate across all revisions. Defaults to the live revision when omitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the primary behavioral aspects. The description adds modest context by describing the aggregation behavior and the time filter, but does not mention any side effects, error conditions, or rate limits beyond what the annotations imply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that states the primary action and key qualifiers without any extraneous text. It front-loads the main intent ('Aggregate evaluation counts and flag distribution') and is appropriately concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of an output schema, the description does not explain the return structure, which could be a gap. However, it does convey the core purpose and the important parameters, and for a read-only aggregation tool, the information provided is likely sufficient for an agent to call it correctly. Omission of return details is the main shortfall.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains each parameter. The description adds little beyond the schema: it mentions 'since the given timestamp' but that is already in the 'since' parameter description. No additional parameter details are provided that are not already present.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Aggregate') and a clear resource ('evaluation counts and flag distribution for an Assignment's Jobs since the given timestamp'). It clearly differentiates from sibling getters like getEvalRubrics or listRuns by specifying an aggregation over evaluated jobs with a time filter.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 context by mentioning the timestamp filter and the aggregation nature, which suggests it is for summary metrics rather than individual records. It also hints at the 'scope' parameter's effect indirectly via the description of revision_id, but it does not explicitly state when to prefer this over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getFileContentGet File ContentBRead-onlyIdempotentInspect
Get the content of a text file.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path of the file relative to the team's storage root | |
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is consistent with the annotations (readOnlyHint=true, idempotentHint=true, destructiveHint=false) — a read operation — so there is no contradiction. The 'text file' qualifier adds a mild behavioral constraint (binary files aren't supported), but the description otherwise discloses nothing beyond the annotations: no return encoding, no size limits, no missing-file error behavior. With annotations carrying the safety profile, the added value is thin but present.
Agents need to know what a tool does to the 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, 'Get the content of a text file,' with zero wasted words and the verb front-loaded. It's appropriately brief for a simple read tool, though this sentence is also the entire description with no supporting structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 2-parameter read tool, the schema covers all parameters and the annotations cover the safety profile, so the essentials are in place. However, with no output schema, the description doesn't specify how content is returned (raw text vs wrapped/encoded payload), and behavior for missing paths or non-text files is unstated — modest but real gaps for an agent deciding whether and how to invoke 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?
Schema description coverage is 100%, so both parameters are already well documented: path is explicitly 'relative to the team's storage root,' and team_id carries detailed API-key-pinning versus OAuth guidance. The tool description itself adds no parameter-level meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get') and resource ('the content of a text file'), making the tool's core function immediately clear. It implicitly distinguishes from siblings like getFileDownloadUrl (URL vs content) and updateFileContent (modify vs read), but it doesn't name alternatives or explicitly call out the text-file-only scope, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. The description never mentions getFileDownloadUrl for URL needs, updateFileContent for edits, or listFiles for file discovery, and it gives no exclusions for binary files or large files. An agent must infer usage entirely from the tool name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getFileDownloadUrlGet File Download UrlBRead-onlyIdempotentInspect
Generate a signed download URL for a file.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path of the file relative to the team's storage root | |
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile with readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description is consistent with those. It adds the useful point that the result is a signed, auth-bearing URL rather than raw file content, but it does not explain signed-URL lifecycle details such as expiration. This is modest added context 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 a single sentence with no filler, front-loading the verb and object. Every word earns its place, and it is appropriately terse for a simple URL-generation tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only, idempotent tool with two parameters and 100% schema coverage, the description plus schema is sufficient for correct invocation. It could explicitly mention the return value shape or URL expiration, but 'generate a signed download URL' already communicates the core output expectation. These are minor gaps, not blockers.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline applies; path and team_id both have informative descriptions covering storage-root interpretation and API-key/OAuth team behavior. The description itself adds no parameter-level detail, so it neither compensates beyond the schema nor leaves gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Generate a signed download URL') and the resource ('a file'), and 'signed' distinguishes it from generic URL or content-fetch tools. It does not, however, explicitly name sibling tools such as getFileContent or createFileUploadUrl, so differentiation relies on inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus alternatives like getFileContent, listFiles, or createFileUploadUrl, and no excluding conditions are given. The only usage hint is the generic phrase 'for a file,' which leaves selection context to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getLegacyClarityProcessGet Legacy Clarity ProcessARead-onlyIdempotentInspect
Get a legacy v1 Clarity process with process metadata, generated analysis, automation guidance, generation progress, and captures. Use this for rows from listClarityProcesses where version=1; v2 rows should use getClarityProcess and snapshot detail tools.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent, and non-destructive behavior, so the bar for added transparency is lower. The description adds context that this is a 'legacy' v1 process and lists the output categories, which gives some insight into expected behavior. However, it does not mention potential side effects or limitations beyond the legacy tag, so it's not perfectly transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, consisting of two sentences that efficiently communicate purpose and usage. It avoids redundancy and fluff, making it straightforward to parse. The structure is logical: first the action and content, then the usage guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of an output schema, the description does provide a high-level summary of what is returned (metadata, analysis, guidance, progress, captures). It also includes essential usage context for when to apply this tool. However, it does not detail the exact structure of the output or any error conditions, leaving some gaps, but it's sufficient for basic understanding.
Complex tools with many parameters or behaviors need more documentation. 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 defines only 'id' with no description, and the tool description does not explicitly explain what 'id' represents. While it can be inferred from the context ('rows from listClarityProcesses') that 'id' is the process identifier, this is implicit rather than explicit. With 0% schema description coverage, the tool description should have compensated by clearly stating the parameter's meaning, which it fails to do.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 action ('Get') and resource ('legacy v1 Clarity process'), enumerates the returned content (metadata, analysis, guidance, progress, captures), and explicitly distinguishes it from the v2 counterpart (getClarityProcess). This leaves no ambiguity about the tool's purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage criteria: 'Use this for rows from listClarityProcesses where version=1' and directs v2 rows to alternative tools. This makes the when-to-use and when-not-to-use conditions crystal clear, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getNotificationGet NotificationARead-onlyIdempotentInspect
Get a single notification by id for the authenticated user. Requires the Notification Center feature; returns 404 when it is not enabled for the team.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The notification's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds non-obvious runtime behavior beyond those hints: the feature requirement and the 404 when Notification Center is disabled, plus the authenticated-user scoping. This is meaningful behavioral context and does not contradict any annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. The operation is front-loaded, and the second sentence adds only the prerequisite and one relevant error behavior. 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 one-parameter, read-only getter with full schema coverage and strong annotations, the description is complete: it covers purpose, auth scope, and the key 404 edge case. No output schema exists, so return-value detail is not expected, and nothing needed to invoke 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 coverage is 100%, so the description does not need to compensate for undocumented parameters. The only parameter, id, is already described in the schema with a UUID format, so the description's 'by id' adds no new semantic detail. A baseline 3 is appropriate when the schema carries the 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 opens with a specific verb and resource: 'Get a single notification by id for the authenticated user.' It distinguishes this from batch, feed, list, and count notification siblings even without naming them, because 'single' and 'by id' clearly signal the lookup operation. It is not a mere restatement of the tool name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied: call this when you have a notification id and need exactly one notification for the current user. It also gives a useful prerequisite and failure mode, the 404 when Notification Center is not enabled. However, it never explicitly contrasts this with alternatives like getNotificationBatch, getNotificationFeed, listNotifications, or getUnreadNotificationCount, so routing guidance is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getNotificationBatchGet Notification BatchARead-onlyIdempotentInspect
Get a single notification batch by id for the authenticated user, with per-type live-member counts, unread count, and worst severity. Serves cold deep links and sidebar retention for batches the caller can no longer see in the feed. Counts every live member by default; the optional type/severity/minSeverity filters narrow them to matching members only, exactly as the feed narrows a batch row it returns under the same filters. Requires the Notification Center feature; returns 404 when it is not enabled for the team, the batch does not exist, it belongs to another recipient/team, or no live member matches the given filters.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The notification batch's unique identifier | |
| type | No | Count only live members of this type. Omit to count every live member. | |
| agents | No | When 'mine', 404 unless the batch's agent is one the authenticated user created. Pass it alongside the feed's My agents filter so a retained batch cannot come back narrowed on type and severity but not on ownership. | |
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| severity | No | Count only live members with exactly this severity. Mutually exclusive with minSeverity. One of: info, warning, critical, success. | |
| minSeverity | No | Count only live members at or above this urgency. Least to most urgent: success < info < warning < critical. Mutually exclusive with severity. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/destructive annotations, the description discloses important non-obvious behavior: it requires the Notification Center feature, and returns 404 in four distinct cases, including the subtle case where no live member matches the given filters. It also clarifies the default counting behavior versus filtered counting.
Agents need to know what a tool does to the 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 dense sentences with no filler. It leads with the core action and result, then explains filtering semantics, then error conditions. Each sentence carries meaningful behavioral or contextual information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with six parameters and no output schema, the description is thorough: it identifies the output components, explains filter behavior and defaults, states ownership/team constraints, lists all relevant 404 cases, and clarifies the feature prerequisite. Nothing an agent needs to select or 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?
Schema coverage is 100%, so the parameters are already well documented. The description adds value by explaining that type/severity/minSeverity narrow the live-member counts rather than changing which batch is returned, and that counts include every live member by default. It does not deeply annotate agents or team_id because the schema already covers them well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Get a single notification batch by id') and details the returned derived values: per-type live-member counts, unread count, and worst severity. It also positions the tool against the feed by stating it serves batches the caller can no longer see there, which distinguishes it from getNotificationFeed and getNotificationCounts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 this tool is used: for cold deep links and sidebar retention of batches that are no longer visible in the feed. It does not explicitly name sibling tools or give a 'use X instead when...' rule, but the context signals and 'feed' references make the intended usage reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getNotificationCountsGet Notification CountsARead-onlyIdempotentInspect
Per-type notification counts for the authenticated user's current team. Narrow with unread, and with either severity (counts only that exact severity) or minSeverity (counts that urgency and above) — the two are mutually exclusive and a request carrying both is rejected with 400. Pass the same filters the feed is showing, so the counts describe the list the reader would land on. Requires the Notification Center feature; returns 404 when it is not enabled for the team.
| Name | Required | Description | Default |
|---|---|---|---|
| agents | No | When 'mine', only count notifications for agents the authenticated user created (plus connection_broken, which is always counted), so the counts match a feed filtered the same way. | |
| unread | No | If true, only count unread notifications. | |
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| severity | No | Only count notifications with exactly this severity, so the counts match a feed filtered the same way. Mutually exclusive with minSeverity. | |
| minSeverity | No | Only count notifications at or above this urgency, so the counts match a feed filtered the same way. Least to most urgent: success < info < warning < critical. Mutually exclusive with severity. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnlyHint=true, idempotentHint=true, destructiveHint=false), so the description's job is to add context beyond that. It delivers: the 400 rejection when severity and minSeverity are combined, the 404 when Notification Center is not enabled, the 'authenticated user's current team' auth scope, and the semantics that counts mirror the feed filters. This is exactly the kind of error-behavior and scoping disclosure that annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with zero waste: the core purpose is front-loaded in sentence one, filter semantics and the exclusivity constraint follow in sentence two, and the feature prerequisite with its error code closes in sentence three. Every sentence carries distinct information, and the structure mirrors the decision order an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, zero-required-parameter tool, the combination of rich annotations, 100% schema coverage, and a description covering scope, filter constraints, error cases, and feature requirements is nearly complete; no output schema exists but 'per-type counts' implies the response shape. The only gap is that the description does not explicitly route the agent among the many notification siblings in the toolset, leaving sibling differentiation to the name and the word 'per-type'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five parameters in detail, including enum meanings, the urgency ordering for minSeverity, team_id behavior for API keys vs OAuth callers, and the agents const. The description reinforces the mutual-exclusivity of severity/minSeverity and the feed-matching intent, but adds little information the schema doesn't already provide. Per the calibration baseline, 3 is correct when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource+scope: 'Per-type notification counts for the authenticated user's current team.' The phrase 'per-type' distinguishes it from the single-total sibling getUnreadNotificationCount, and the notion of counts (not records) distinguishes it from getNotificationFeed and listNotifications. An agent can tell what this tool produces without inspecting the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: 'Pass the same filters the feed is showing, so the counts describe the list the reader would land on' tells the agent when this tool is the right choice, and the mutual-exclusivity rule for severity/minSeverity with its 400 rejection is an explicit operational constraint. However, it never names the alternative notification tools (getNotificationFeed, listNotifications, getUnreadNotificationCount) or states a when-not-to-use condition, so routing among siblings relies on inference from tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getNotificationFeedGet Notification FeedARead-onlyIdempotentInspect
List the notification feed for the authenticated user's current team, most recent activity first. Each item is either an individual notification or a notification batch (a per-agent group of job_issue/eval_issue/job_done/schedule_issue notifications). Filter with type, unread, and either severity (exact match) or minSeverity (threshold; the two are mutually exclusive); paginate with limit/cursor. Either severity filter also narrows a surfaced batch's counts to its qualifying members, and hides a batch with no qualifying live member. The feed is eventually consistent — a batch's counts can lag a concurrent write by one page fetch. Requires the Notification Center feature; returns 404 when it is not enabled for the team.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Only return individual notifications of this type and batches with at least one live member of it. | |
| limit | No | ||
| agents | No | When 'mine', only return notifications for agents the authenticated user created. connection_broken notifications are always returned regardless, because they are not about an agent: a broken connection is only notified to the people who can act on it or escalate it, so filtering by agent authorship would hide it from the reader it was addressed to. | |
| cursor | No | ||
| unread | No | If true, only return unread individual notifications and batches with at least one unread live member. | |
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| severity | No | Only return individual notifications with exactly this severity, and batches with at least one live member of it. A batch's counts then describe only those members. Mutually exclusive with minSeverity. One of: info, warning, critical, success. | |
| minSeverity | No | Only return individual notifications at or above this urgency, and batches with at least one live member at or above it. A batch's counts and worst severity then describe only its members at or above the threshold. Least to most urgent: success < info < warning < critical. Mutually exclusive with severity. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already mark the call read-only, idempotent, and non-destructive, and the description adds substantial runtime behavior beyond that: batch grouping semantics, severity filters narrowing batch counts and hiding empty batches, eventual consistency with counts lagging by one page fetch, and a 404 when the feature is disabled. This is excellent behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well organized: it starts with what the tool returns, then covers item composition, filtering and pagination, batch-count effects, and operational caveats. Every sentence earns its place, and there is no redundant restatement of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and a complex batch/feed model, the description covers all operationally important aspects: scope, ordering, item types, filters, pagination, batch behavior, eventual consistency, and feature availability. An agent has enough context to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents most parameters well (75% coverage). The description adds value by summarizing the filter model, making the exact-match vs threshold distinction and mutual exclusivity of severity and minSeverity explicit, and identifying limit/cursor as the pagination mechanism, which the schema leaves undescribed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 a concrete action and resource: list the authenticated user's current-team notification feed, most recent activity first, and it explains that items are individual notifications or batches. However, it does not explicitly differentiate itself from closely related siblings like listNotifications, getNotificationBatch, or getNotificationCounts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 strong contextual guidance: it targets the current team's feed, supports filters and pagination, and warns that the Notification Center feature must be enabled or the call returns 404. It does not explicitly say when to use this tool instead of the sibling notification tools, so it lacks explicit alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getOrgInsightsHeadlineGet Org Insights HeadlineARead-onlyIdempotentInspect
Get org-wide headline insight KPIs (run totals, success rate, distinct active agents and users) aggregated across every team in the organization. Requires an organization Admin, Executive, or Owner role.
| Name | Required | Description | Default |
|---|---|---|---|
| orgId | Yes | The organization's unique identifier | |
| endDate | No | End of the aggregation window (ISO 8601 datetime, exclusive). Defaults to now; clamped to now. | |
| startDate | No | Start of the aggregation window (ISO 8601 datetime). Defaults to 30 days ago; clamped to at most 365 days ago. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true and destructiveHint=false annotations already covering safety, the description adds useful behavioral context: aggregation across every team in the organization and the role gate. It does not contradict the annotations and provides value beyond the structured hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler: the first sentence states the action, scope, and output KPIs, and the second states the access requirement. Important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only KPI retrieval tool with no output schema, the description covers what is returned, the aggregation scope, and role requirements, while parameters are fully documented in the schema. It is complete enough for an agent to call correctly, though it could add a pointer to related getOrgInsights* tools for fuller context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents orgId, startDate, and endDate including defaults and clamping behavior. The description does not add parameter-level 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 opens with a specific verb and resource: 'Get org-wide headline insight KPIs' and enumerates the exact metrics returned (run totals, success rate, distinct active agents and users), making the core purpose unmistakable. However, it does not explicitly differentiate from sibling tools like getOrgInsightsMetrics or getOrgInsightsUsageChart, which keeps it at a 4 rather than a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The role requirement (Admin, Executive, or Owner) gives a clear prerequisite, and the org-wide scope implies when this tool is appropriate. It does not name alternatives or state when to prefer getOrgInsightsMetrics or getOrgInsightsUsageChart, so usage guidance remains implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getOrgInsightsMetricsGet Org Insights MetricsARead-onlyIdempotentInspect
Get org-level insights metrics (runs, assignments, schedules) broken down per team across the organization. Requires an organization Admin, Executive, or Owner role.
| Name | Required | Description | Default |
|---|---|---|---|
| orgId | Yes | The organization's unique identifier | |
| endDate | No | End of the aggregation window (ISO 8601 datetime). Defaults to now; clamped to now. | |
| startDate | No | Start of the aggregation window (ISO 8601 datetime). Defaults to 7 days ago; clamped to at most 365 days ago. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, idempotentHint, and non-destructive behavior, lowering the burden on the description. The description adds meaningful context by specifying the role requirement and the per-team breakdown behavior, which is not fully captured by annotations. It does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. It front-loads the core purpose and metric categories, then adds the role requirement. 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 read-only, idempotent tool with three well-documented parameters and no output schema, the description provides sufficient context: what data is included, how it is grouped, and who is allowed to call it. It does not explain the return format, but the annotations and schema already cover safety and parameter details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the input schema already documents orgId, startDate, and endDate with descriptions. The tool description does not add much about parameter semantics beyond reinforcing that these are org-level metrics aggregated per team. Baseline 3 is appropriate because the schema carries the parameter documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: get org-level insights metrics covering runs, assignments, and schedules, broken down per team. It conveys what the tool does without ambiguity, though it does not explicitly differentiate itself from closely related siblings like getOrgInsightsHeadline or getOrgInsightsUsageChart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 this tool is appropriate: org-level insights metrics aggregated per team across the organization. It also includes an important usage restriction by requiring an Admin, Executive, or Owner role. It does not explicitly discuss alternatives, but the context is strong enough for an agent to select this tool for org-wide metrics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getOrgInsightsUsageChartGet Org Insights Usage ChartARead-onlyIdempotentInspect
Get org-level run-volume buckets (scheduled vs on-demand) at day/week/month granularity across the organization. Requires an organization Admin, Executive, or Owner role.
| Name | Required | Description | Default |
|---|---|---|---|
| orgId | Yes | The organization's unique identifier | |
| endDate | Yes | End of the chart window (ISO 8601 datetime). Clamped to now. | |
| timezone | No | IANA timezone for bucket boundaries (e.g. America/New_York). Defaults to UTC. | |
| startDate | Yes | Start of the chart window (ISO 8601 datetime). Clamped to at most 365 days ago. | |
| granularity | Yes | Bucket size: day, week, or month |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive behavior. The description adds role requirements and clarifies the data scope, but does not mention any side effects (none exist) or return format, which is acceptable given the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that immediately conveys the tool's purpose without unnecessary fluff, effectively front-loading the key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool without an output schema, the description provides the essential context (role, data type, granularity). It does not elaborate on return formatting, but that is not critical for 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?
Schema descriptions cover all parameters (100% coverage) with clear explanations for orgId, startDate, endDate, timezone, and granularity. The description does not add extra parameter-specific details beyond the schema, but the baseline is adequate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 retrieves run-level usage buckets (scheduled vs on-demand) with granularity options, and distinguishes it from sibling insights tools by specifying the exact data returned and required 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?
While it does not explicitly mention alternatives, the description implies this is the go-to for org-wide usage charts and notes the role requirement, providing sufficient guidance for typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getProfileGet ProfileARead-onlyIdempotentInspect
Get the profile of the authenticated user (the owner of the API key).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds useful context about authentication scope ('the owner of the API key') but does not describe the return shape or any additional behavior, though none is strictly necessary.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clear sentence with no wasted words. The key information—what is returned and whose profile—is front-loaded and immediately actionable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless read-only getter, the description sufficiently explains the target resource and authentication context. It does not describe the profile fields returned, but since there is no output schema and invocation requires no inputs, the description is adequate for correct tool use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema leaves nothing undocumented. The description adds no parameter details, but none are needed; the baseline of 4 applies 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 ('get') and resource ('profile of the authenticated user'), and clarifies that the subject is the API key owner. This clearly distinguishes it from other getters like getTeam or getAgent, which target different entities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: this tool is for the authenticated user's own profile, not any other user or team. It does not explicitly name alternatives, but no closely competing sibling exists for fetching one's own profile, so the usage context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getPulseDashboardGet Pulse DashboardARead-onlyIdempotentInspect
Get a Duvo Pulse dashboard's metadata and generation status. When status is completed and html_code_present is true, fetch the rendered HTML from GET /artifacts/{artifactId}/render; the conversation is served by GET /artifacts/{artifactId}/messages.
| Name | Required | Description | Default |
|---|---|---|---|
| artifactId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only, idempotent, non-destructive safety profile. The description adds useful behavioral context by revealing that the tool only returns metadata/status, not the rendered HTML, and by specifying the two follow-up endpoints. 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 dense sentences front-load the core purpose and then provide the conditional follow-up actions. There is no filler or redundant repetition of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only tool with no output schema, the description names the key result fields (status, html_code_present) and tells the agent what to do next, which is enough to invoke it correctly and handle the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description needs to help with artifactId, but it never explicitly defines it. The path template /artifacts/{artifactId}/... and the phrase 'a Duvo Pulse dashboard' imply artifactId identifies the dashboard, which is sufficient for this single simple UUID parameter but leaves the documentation gap to inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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: retrieving a Duvo Pulse dashboard's metadata and generation status. This clearly separates it from siblings like getPulseDashboardHtml and getPulseDashboardPdf, which fetch rendered artifacts rather than metadata.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 actionable context by explaining that once status is completed and html_code_present is true, the agent should move to the render endpoint, and that messages come from a separate endpoint. It does not explicitly name sibling tools as alternatives, but the workflow is clear enough to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getPulseDashboardAttachmentDownloadUrlGet Pulse Dashboard Attachment Download UrlARead-onlyIdempotentInspect
Mint a short-lived presigned URL to download or preview a file attached to a Duvo Pulse dashboard message. Returns 404 once the dashboard's sandbox has expired and the file is gone (about 12 hours).
| Name | Required | Description | Default |
|---|---|---|---|
| artifactId | Yes | ||
| attachmentId | Yes | The attachment to mint a download URL for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only and idempotent, and the description adds meaningful behavioral detail beyond that: the URL is short-lived, and the tool returns 404 after the dashboard sandbox expires in about 12 hours. This gives an agent clear expectations about failure modes and URL lifetime.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the purpose front-loaded and the expiration/404 behavior as useful secondary detail. There is no filler, repetition, or unnecessary restating of what the schema and annotations already provide.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter URL-minting tool with read-only and idempotent annotations, the description covers purpose, expiry, and the key failure mode. It does not specify how to obtain artifactId/attachmentId or describe the success response, but the return value is strongly implied and no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: attachmentId has a description, artifactId does not. The description provides useful domain context ('dashboard', 'attachment') that helps infer the roles of both parameters, but it does not explicitly explain artifactId or how the two IDs relate, so it only partially compensates for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a precise operation ('Mint a short-lived presigned URL') and a specific resource ('a file attached to a Duvo Pulse dashboard message'), which clearly distinguishes it from generic file download tools. It doesn't explicitly name sibling tools, but the domain scoping is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'to download or preview a file attached to a Duvo Pulse dashboard message' establishes a clear use case, and the context is enough to differentiate from upload, export, or dashboard-level download tools. It does not mention alternatives or exclusions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getPulseDashboardHtmlGet Pulse Dashboard HtmlARead-onlyIdempotentInspect
Serve a Duvo Pulse dashboard's rendered HTML document (text/html, not JSON). 404 until the first generation turn has produced HTML.
| Name | Required | Description | Default |
|---|---|---|---|
| artifactId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, and non-destructive behavior. The description adds meaningful non-obvious behavior beyond annotations: the 404-until-generation constraint and the explicit text/html response type. This is valuable context for an agent deciding whether and when to call 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 two sentences with no filler. The primary action is front-loaded, and the 404 caveat is a concise, high-value behavioral detail that 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 HTML fetch, the description covers the essential non-obvious details: response content type and the 404-before-generation behavior. It is mostly complete, though explicit sibling routing and a direct explanation of artifactId would make it fully self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema describes artifactId as a required UUID with a pattern but provides no description. The tool description never names or explains the parameter, so with 0% schema description coverage it does not compensate. The phrase 'a Duvo Pulse dashboard's rendered HTML' implies artifactId identifies the dashboard, but this is left to inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 'Serve' and the resource: a Duvo Pulse dashboard's rendered HTML document, with the content type 'text/html, not JSON'. This distinguishes it from JSON-returning getters, but it does not explicitly differentiate it from close siblings like getPulseDashboardVersionHtml or exportPulseDashboardHtml.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 a useful temporal usage condition: it will 404 until the first generation turn has produced HTML, implying it should be called after generation. However, it provides no explicit guidance about when to choose this tool over version-specific or export-related siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getPulseDashboardPdfGet Pulse Dashboard PdfARead-onlyIdempotentInspect
Render a Duvo Pulse dashboard to a PDF document (application/pdf, not JSON). 404 until the first generation turn has produced HTML; 409 for an openui dashboard, whose substrate this exporter cannot render.
| Name | Required | Description | Default |
|---|---|---|---|
| theme | No | light | |
| artifactId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond the annotations: it documents the PDF MIME type, the state-dependent 404, and the 409 for unsupported openui dashboards. This is valuable because it warns the agent about preconditions and limitations that annotations alone do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The primary purpose is front-loaded, and the second sentence efficiently delivers the only two error conditions an agent needs to know.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 rendering tool with annotations covering safety, the description is complete: it specifies the output format, important error states, and the prerequisite generation condition. The schema handles parameter constraints, so no critical information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description needed to explain the parameters but does not mention artifactId or theme. The purpose makes artifactId inferable as the dashboard identifier, and the schema provides format constraints, but the description adds no direct parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource ('Render a Duvo Pulse dashboard to a PDF document') and explicitly distinguishes the output type ('application/pdf, not JSON'), which differentiates it from sibling tools like getPulseDashboardHtml. The purpose is immediately clear 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 provides clear contextual conditions: the tool returns 404 until HTML has been produced and 409 for openui dashboards. This gives useful when/not-when guidance, though it does not explicitly name alternative tools for HTML or other output formats.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getPulseDashboardVersionHtmlGet Pulse Dashboard Version HtmlARead-onlyIdempotentInspect
Serve a specific version's rendered HTML document for a Duvo Pulse dashboard (text/html, requires edit access).
| Name | Required | Description | Default |
|---|---|---|---|
| artifactId | Yes | ||
| revisionId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only/idempotent/non-destructive behavior. The description adds two useful facts beyond that: the response is text/html and the caller needs edit access. It doesn't discuss not-found or permission-error behavior, but those are secondary given the annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the resource and scope, and no filler. The format and access requirement are packed into parentheticals without bloating.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool, the description covers the resource, MIME type, and access requirement, and annotations cover safety. But the absence of any parameter-level guidance and explicit relationship to sibling HTML/PDF tools leaves minor selection ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description needed to explicitly map artifactId and revisionId to the dashboard and version. It gives only the general 'specific version's rendered HTML document for a Duvo Pulse dashboard' context, leaving the agent to infer which UUID is which.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Describes a specific action — serving the rendered HTML of a particular Duvo Pulse dashboard version — and adds format/scope ('specific version's', 'text/html'). The qualifier 'specific version's' implicitly separates it from current-version HTML retrieval, though it doesn't name a sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a prerequisite ('requires edit access') and implies the use case of retrieving one revision's HTML, but it doesn't state when to prefer this over getPulseDashboardHtml, getPulseDashboardPdf, or exportPulseDashboardHtml. There is no explicit exclusion or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getQueueGet QueueCRead-onlyIdempotentInspect
Get a queue by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| queue_id | Yes | The queue's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds no behavioral detail beyond the annotation coverage, such as return format, not-found behavior, or whether the result includes nested queue configuration.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words, matching the simplicity of the operation. It is arguably a restatement of the tool name, but it is appropriately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read operation with safety annotations, this is nearly sufficient for correct invocation. However, with no output schema, the description does not convey what the response contains or what happens if the queue ID is not found, and it does not route between sibling queue tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers the single queue_id parameter at 100% and already describes it as the queue's unique identifier. The description adds nothing about the parameter, so the baseline score applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and identifies the resource ('queue') with lookup by ID, so the operation is immediately clear. It does not name sibling tools like listQueues or getQueueAggregationResult, but the basic purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to call this versus listQueues, createQueue, updateQueue, or other queue-related tools. The intended use is implied by the name, but the description provides 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.
getQueueAggregationResultGet Queue Aggregation ResultARead-onlyIdempotentInspect
Read an aggregation definition's cached result.
| Name | Required | Description | Default |
|---|---|---|---|
| queue_id | Yes | The queue's unique identifier | |
| definition_id | Yes | The aggregation definition's identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the safety profile (readOnlyHint=true, idempotentHint=true, destructiveHint=false), so the description's burden is reduced. The description adds one useful behavioral fact beyond annotations: the result is 'cached,' meaning it may be stale relative to a freshly evaluated aggregation. It does not disclose what happens when no cached result exists or whether the result is returned in the same shape as an evaluation.
Agents need to know what a tool does to the 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 eight-word sentence with zero filler. The verb is front-loaded, and every word earns its place — 'cached' carries the key semantic weight that separates this from evaluation tools.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read operation with rich annotations (read-only, idempotent, non-destructive) and no output schema, the description is mostly sufficient. The notable gap is the unresolved relationship to the sibling cluster listingQueueAggregations, evaluateQueueAggregation, and refreshQueueAggregation — an agent must infer when the cached result is the right choice versus those alternatives.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: both queue_id and definition_id have type, format, pattern, and descriptive text in the schema. The description adds no new parameter information, so the baseline of 3 applies — the schema carries the full load and does so adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Read') and resource ('an aggregation definition's cached result'), which is clear and unambiguous. The qualifier 'cached' hints at a distinction from the sibling tools evaluateQueueAggregation and refreshQueueAggregation, but it does not explicitly name them, so differentiation is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word 'cached' implies this tool is for retrieving a precomputed result rather than computing or refreshing one, giving an implied usage context. However, there is no explicit when-to-use guidance, no mention of alternatives like evaluateQueueAggregation for fresh results or refreshQueueAggregation to recompute, and no exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getQueueJsonSchemaGet Queue Json SchemaARead-onlyIdempotentInspect
Get a queue's Case schema settings: whether it requires typed cases, and the schema it validates them against.
| Name | Required | Description | Default |
|---|---|---|---|
| queue_id | Yes | The queue's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, idempotentHint=true, destructiveHint=false), and the description is consistent with them. The description adds the useful context of exactly what payload the read exposes, but it does not disclose edge behaviors such as what is returned when no schema is attached. No annotation contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero waste. The verb and resource lead, and the colon-delimited specifics ('whether it requires typed cases, and the schema it validates them against') earn their place by clarifying the return 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 simple one-parameter read with strong annotations and no output schema, the description adequately covers what the tool does and what it returns. Minor gaps remain, such as behavior when no schema is attached, but nothing essential blocks correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with queue_id documented as 'The queue's unique identifier' plus uuid format and pattern constraints. The description adds no parameter detail beyond the schema, which is acceptable given the baseline of 3 for high 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 has a specific verb (Get), a specific resource (a queue's Case schema settings), and precise return semantics (typed-case requirement and validation schema). It is clearly distinguishable from mutation siblings like attachQueueJsonSchema, replaceQueueJsonSchema, and updateQueueJsonSchemaSettings, though it does not explicitly name any sibling for contrast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied: an agent can infer this tool is for retrieving a queue's case-schema configuration. However, there is no explicit guidance about when to prefer this over closely related tools such as getQueue, listQueues, or the queue-schema mutation tools, and no exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getRevisionGet RevisionCRead-onlyIdempotentInspect
Get a revision by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | The agent's unique identifier | |
| build_id | Yes | The build's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, which cover the safety profile. The description adds no behavioral context beyond the basic read operation—it does not mention return behavior, error cases, or the composite nature of the identifier.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one short sentence with no filler and the core action is front-loaded. It earns its place without unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should clarify what the returned revision looks like and how agent_id plus build_id map to a revision. The description leaves this ambiguous, and the 'by ID' wording is not helpful given the two required parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents agent_id and build_id clearly. The tool description adds no parameter meaning and its phrase 'by ID' could even mislead an agent into expecting a single revision_id parameter that does not exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Get') and the resource ('a revision'). However, it does not differentiate revision from related concepts like skill revisions or agent revisions, and 'by ID' is imprecise because the schema requires both agent_id and build_id rather than a single revision ID.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus sibling tools such as listAgentRevisions, getRun, or getSkillRevision. There is no mention of intended context, prerequisites, or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getRevisionCaseQueueSetupGet Revision Case Queue SetupARead-onlyIdempotentInspect
Check that this build's case-queue integration slots are wired up correctly. Returns, per case-queue-producer/consumer slot, how many queues are linked, plus whether any queue is available to bind (scoped to the agent's automation on a migrated team, team-wide otherwise). A slot with linked_queue_count of 0 is attached but points at no queue and will fail at runtime — link a queue with replaceRevisionIntegrationQueues before starting work.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | Agent ID | |
| build_id | Yes | Build ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only, idempotent, non-destructive safety profile. The description adds substantial behavioral detail beyond that: per-slot queue counts, queue availability scoping based on team migration state, and the runtime failure implication of zero linked queues.
Agents need to know what a tool does to the 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, each earning its place: purpose first, return semantics second, actionable failure scenario third. The description is front-loaded and contains 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?
Even without an output schema, the description communicates the return contents and even names a field (linked_queue_count). For a read-only diagnostic tool with only two required parameters, an agent has enough context to call it correctly and understand the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema documents agent_id and build_id with 100% coverage, though the field descriptions are only 'Agent ID' and 'Build ID'. The tool description references 'this build's' and 'agent's automation' but does not add meaningful parameter-level 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 clearly states the tool's function: checking whether a build's case-queue integration slots are wired correctly. It is specific about the resource (case-queue producer/consumer slots), the verb (Check), and the return shape, which distinguishes it from siblings like listRevisionIntegrationQueues.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 to check before starting work and tells the agent what to do if a slot has linked_queue_count of 0: use replaceRevisionIntegrationQueues to link a queue. This gives both a clear when-to-use condition and a concrete alternative action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getRunGet RunARead-onlyIdempotentInspect
Get information about an agent run. Can be polled to check status.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | The run's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool readOnly, idempotent, and non-destructive. The description adds value by explaining that repeated polling for status is expected, which is a behavioral trait not fully captured by those annotations. It does not describe output fields, but the annotations cover the safety profile well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler: the first states the tool's purpose, and the second states the polling use case. The key information 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 simple one-parameter, read-only, idempotent tool, the description is adequate: an agent knows what the tool does and that it can be polled for status. It does not specify return fields or error behavior, but the low complexity and strong annotations make those omissions acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, run_id, is fully documented in the schema with format, pattern, and description ('The run's unique identifier'), so schema coverage is 100%. The description does not add parameter-level meaning beyond what the schema already provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get information about an agent run.' It also adds a distinguishing behavior, 'Can be polled to check status,' which separates it from listRuns (plural listing) and getRunEvaluation (evaluation-specific). This is clear enough to identify the tool among a very large sibling set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The sentence 'Can be polled to check status' gives a clear usage context: call this repeatedly to monitor a run's progress. It does not explicitly name alternatives or exclusions, but the intended polling pattern is evident from the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getRunEvaluationGet Run EvaluationARead-onlyIdempotentInspect
Get the latest evaluation analysis for a specific agent run (Run).
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | The run's unique identifier (Run ID) | |
| agentId | Yes | The agent's unique identifier (Agent ID) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds the 'latest' recency behavior and run scoping, but does not disclose output shape or absence behavior. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no filler. The main action and resource are front-loaded, and every word contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only getter with complete parameter documentation and safety annotations, the description is adequately complete. It identifies the object type, the required scope, and the recency of the result; the absence of an output schema is partially mitigated by the clear resource 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?
Both parameters are fully described in the schema with unique identifiers and UUID formats, so schema coverage is 100%. The description does not add parameter-level meaning beyond what the schema already provides, 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 names a specific verb ('Get') and a specific resource ('latest evaluation analysis') scoped to a particular agent run. This clearly distinguishes it from related tools like getRun (run metadata) and getEvalScores (evaluation scores).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when the latest evaluation analysis for a specific run is needed, but it provides no explicit guidance about alternatives or when not to use this tool. There are no exclusions or comparison to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getSecretGet SecretBRead-onlyIdempotentInspect
Get an env-var secret by id. Returns metadata and env var keys; secret values are never exposed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. Beyond that, the description adds valuable context: the tool returns metadata and env var keys, and that values are never exposed — a security guarantee an agent needs before trusting the tool's 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 with zero filler. The verb+resource is front-loaded, and the second sentence earns its place by disclosing both return contents and a critical security property.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 get-by-id tool with no output schema, the description covers the return shape but omits error/not-found behavior, id provenance, and any differentiation from similarly named read tools like getCredential. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It confirms lookup is 'by id,' but adds nothing about what an env-var secret id is, how to obtain it (e.g., via listSecrets), or what the uuid parameter semantically refers to beyond the schema's format constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get an env-var secret by id.' The qualifier 'env-var secret' distinguishes it from sibling tools like getCredential and getConnection, though it doesn't name them explicitly. The second sentence sharpens scope by defining exactly what is returned.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (when you need secret metadata or env var keys) but gives no explicit selection criteria, no exclusions, and names no alternatives. The 'secret values are never exposed' line is more a behavioral constraint than routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getSkillFileContentGet Skill File ContentBRead-onlyIdempotentInspect
Get the content of a file in a skill.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Relative path to the file inside the skill, e.g. SKILL.md. | |
| skill_id | Yes | Skill ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a read-only, idempotent, non-destructive operation, so the safety profile is well covered. The description is consistent with those annotations and adds the 'inside a skill' scope, but it does not disclose encoding, error behavior, or how paths are resolved beyond the parameter schema. This is acceptable given the strong 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, focused sentence with no filler and the action is stated up front. It is slightly redundant with the title, but it is efficient and appropriately sized for a simple read operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter, read-only tool with complete schema documentation, the description is mostly sufficient. However, the lack of any guidance distinguishing it from getSkillRevisionFileContent and other skill-file tools leaves a meaningful gap for an agent selecting among many similar operations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both skill_id and path documented, including an example for path. The tool description itself adds no parameter semantics beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get'), a resource ('file content'), and a domain ('a skill'), so the core operation is clear. It stops short of a 5 because it does not explicitly differentiate the tool from closely related siblings like getFileContent or getSkillRevisionFileContent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to choose this tool over alternatives such as getSkillRevisionFileContent, getFileContent, or listSkillFiles. There is no mention of which skill version is being read or when revision-specific access would be more appropriate, so the agent is left to infer usage from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getSkillRevisionFileContentGet Skill Revision File ContentBRead-onlyIdempotentInspect
Get the content of a text file in a skill revision.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Relative path to the file inside the revision, e.g. SKILL.md. | |
| skill_revision_id | Yes | Skill revision ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a safe, idempotent, read-only operation, and the description is consistent with them. It adds modest context by specifying that only text file content is returned, but it does not disclose any other behavior such as path constraints, size limits, or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence with no filler. It names the action, resource, and scope efficiently, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with only two required parameters and a clear schema, the description is largely sufficient. It could be more complete by explicitly routing the agent away from the similar getSkillFileContent tool, but the core calling context is adequately covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented in the schema. The description reinforces that the file must be a text file but does not add meaningful per-parameter semantics beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get the content') and the resource ('a text file in a skill revision'), which is specific enough to convey the tool's core function. It distinguishes itself from generic file tools by scoping to a skill revision, though it does not explicitly contrast with the closely named sibling getSkillFileContent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is for reading files within a specific skill revision, but it gives no explicit guidance on when to choose this tool over alternatives like getSkillFileContent or getFileContent. There is no mention of when not to use it or which sibling handles current-version versus revision-specific files.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getTeamGet TeamARead-onlyIdempotentInspect
Get a team by ID. The caller must be scoped to the requested team.
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds authorization context about team scoping, which is useful behavioral information beyond the annotations. It does not mention error cases like 404 or invalid team access, but the auth constraint is the key extra detail.
Agents need to know what a tool does to the 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, with the core action front-loaded and no unnecessary words. Every sentence contributes meaningful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one optional parameter and rich schema annotations, the description is nearly complete. It could explicitly mention the return value shape or not-found behavior, but 'Get a team by ID' sufficiently implies the successful result 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 description coverage is 100%, and the team_id parameter has a detailed explanation of API-key vs OAuth behavior, fallback semantics, and rejection conditions. The tool description itself adds little parameter-level meaning, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action and resource: 'Get a team by ID.' It is distinct from list-style siblings like listMyTeams and listOrgTeams because it specifies fetching a single team by ID, though it does not explicitly name those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides useful scoping context: 'The caller must be scoped to the requested team.' The parameter description further clarifies when to omit or pass team_id based on API-key vs OAuth authentication. It does not explicitly mention alternative tools or when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getTeamInviteLinkGet Team Invite LinkARead-onlyIdempotentInspect
Get the team's shareable invite link — the one URL anyone can use to join the team, as opposed to a per-person invitation. Returns hasLink: false when no link has been created. Requires the Manager role or above.
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| frontendUrl | No | Deprecated and ignored. The link is built from the server's configured frontend URL so a caller can't choose the host in a Duvo-branded email. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only, idempotent, and non-destructive. The description adds useful behavioral context beyond that: the Manager-or-above role requirement and the fact that the response includes hasLink: false when no invite link exists. This is meaningful disclosure for a simple getter with no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences with no filler. The core purpose is front-loaded, followed by a return-value edge case and an access requirement. Every sentence contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's essential behavior, the no-link case, and the required role. With no output schema, it does not enumerate the full response shape, but for a simple getter this is adequate and no critical calling context appears 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 both team_id and frontendUrl are already thoroughly documented in the schema. The description does not add parameter-level detail, but the schema carries the meaning, 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?
Description states a specific verb and resource: get the team's shareable invite link, and differentiates it from a per-person invitation. It clearly distinguishes this read-only retrieval tool from sibling operations like createTeamInviteLink or sendTeamInviteEmail.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 this tool: when you need the single team-wide invite URL, and explicitly contrasts it with per-person invitations. It does not name specific alternative tools, but the exclusion is clear and the role requirement adds practical usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getUnreadNotificationCountGet Unread Notification CountARead-onlyIdempotentInspect
Get the unread notification count for the authenticated user's current team. Each notification batch with unread members counts as 1, regardless of its member count. Requires the Notification Center feature; returns 404 when it is not enabled for the team.
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavior beyond annotations: the feature dependency, the 404 error condition, and the non-obvious counting semantics for notification batches. This gives the agent useful expectations about the operation's behavior and edge cases 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 three sentences with no filler. It front-loads the core purpose, then adds the essential counting rule, and finally the feature prerequisite and error behavior. Every sentence contributes meaningful information that an agent needs to call the tool correctly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple tool with one optional parameter and no output schema. The description fully covers what count is returned, how it is calculated, the scope (current team), and a key failure mode (404 when Notification Center is not enabled). No critical information for correct invocation is missing, and the absence of an output schema does not create ambiguity because the return value is a count implied by the tool's name and description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers the only parameter (team_id) with a detailed description including UUID format, fallback behavior, and OAuth guidance, so schema description coverage is 100%. The tool description adds context about 'current team' and counting semantics, but it does not add new parameter-level details beyond what the schema already provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('get'), a specific resource ('unread notification count'), and a clear scope ('for the authenticated user's current team'). It also clarifies the counting unit ('Each notification batch with unread members counts as 1'), which distinguishes this count from a raw member-level or item-level count. This is more specific than the tool name alone and gives an agent a precise understanding of what is returned.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear functional context: it targets the authenticated user's current team, and requires the Notification Center feature or it returns 404. This helps an agent decide when the tool is applicable. It does not explicitly name alternatives such as getNotificationCounts or listNotifications, but the usage context is clear enough that an agent can infer when this tool is the intended one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inviteClarityMeetingNotetakerInvite Clarity Meeting NotetakerAInspect
Invite the in-meeting notetaker bot (Recall.ai) to a live meeting; the recording lands as a 'meeting' capture on the process
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The clarity process ID | |
| meetingUrl | Yes | ||
| extraCaptureRequestId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a mutating, non-destructive, non-idempotent operation. The description adds a concrete behavioral outcome—the recording becomes a 'meeting' capture on the process—and identifies the external bot vendor (Recall.ai). This goes beyond annotation defaults without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no filler. The verb, resource, target, and postcondition are front-loaded, making the definition easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The core action is understandable and no output schema exists, but context is incomplete: the optional parameter is unexplained, meeting URL requirements are vague, and there is no mention of what the caller receives after a successful invite. It is minimally viable but has clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33%, so the description must compensate. It adds 'live meeting' context for meetingUrl and relates the action to a process, but it does not explain meetingUrl's accepted formats, how extraCaptureRequestId is used, or what values are valid for each parameter. Most parameter semantics are left unspecified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Invite') with a precise resource ('in-meeting notetaker bot (Recall.ai)') and states the outcome ('recording lands as a 'meeting' capture'). It is clear enough to identify the action, though it does not explicitly contrast with the similarly named inviteClarityOrganizationNotetaker sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It specifies the context for use: inviting the notetaker to a live meeting. However, it gives no explicit alternative conditions, exclusions, or guidance for choosing between this and inviteClarityOrganizationNotetaker, so the when/not-when distinction is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inviteClarityOrganizationNotetakerInvite Clarity Organization NotetakerAInspect
Invite the in-meeting notetaker bot (Recall.ai) to a live meeting; the recording lands as an organization Clarity interview
| Name | Required | Description | Default |
|---|---|---|---|
| orgId | Yes | ||
| title | No | ||
| meetingUrl | Yes | ||
| extraCaptureRequestId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses that the tool invokes an external Recall.ai bot and that the resulting artifact is stored as an organization Clarity interview. This adds useful behavioral context. It does not mention side effects like the bot visibly joining the meeting or duplication risk, but the annotations already address idempotency and destructive behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence communicates the action, the external system, and the resulting artifact with no wasted words. The core outcome is front-loaded and every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is adequate for a simple invitation action, but it omits optional-parameter semantics, gives no clue about the return value, and does not differentiate this tool from inviteClarityMeetingNotetaker. An agent could still invoke it correctly, but only by relying on parameter names and the sibling list.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for missing parameter documentation. It only hints at the meaning of orgId ('organization') and meetingUrl ('live meeting'), while the optional title and extraCaptureRequestId parameters are left unexplained. An agent would have to infer their purpose from parameter names 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 states a specific action ('Invite the in-meeting notetaker bot (Recall.ai) to a live meeting') and a precise result ('the recording lands as an organization Clarity interview'). The word 'organization' helps distinguish this from the sibling inviteClarityMeetingNotetaker even though that alternative is not explicitly named.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context: use this when a live meeting should be recorded into an organization-level Clarity interview. However, it does not explicitly state when not to use it, mention prerequisites, or point to the near-identical sibling inviteClarityMeetingNotetaker, leaving the agent to infer the selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inviteOrgMemberInvite Org MemberAInspect
Invite a person to an organization you administer, optionally assigning them to a team in that organization. Requires an organization Admin, Executive, or Owner role. You cannot grant a role higher than your own.
| Name | Required | Description | Default |
|---|---|---|---|
| role | Yes | ||
| Yes | |||
| orgId | Yes | Organization ID | |
| teamId | No | ||
| sendEmail | No | Email the invitation to the recipient. `false` always suppresses the email. When omitted, the legacy opt-in applies instead: the email is sent only if the deprecated `frontendUrl` is present. Omit both to create the invitation without notifying anyone. | |
| frontendUrl | No | Deprecated. Use `sendEmail` instead. Kept because its presence is the legacy opt-in for sending the invitation email; the value never sets the link host, which is always the server's configured frontend URL. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a non-readonly, non-idempotent, non-destructive operation. The description adds useful behavioral constraints about required roles and role hierarchy, but it does not disclose other side effects such as whether an invitation email is sent or whether the invite creates a pending state. The sendEmail/frontendUrl schema descriptions cover email behavior partially.
Agents need to know what a tool does to the 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 fluff. The core purpose is front-loaded, and the permission constraints follow naturally without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential decision factors: what the tool does, who can use it, and a key role constraint. With no output schema, it could have mentioned the result or side effects more explicitly, but the combination of description and schema provides enough context for correct invocation in most cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%, but the tool description adds meaning by clarifying that teamId is optional and by explaining role hierarchy constraints ('You cannot grant a role higher than your own'). The sendEmail and frontendUrl parameters already have detailed schema descriptions, so the description compensates reasonably for the params that lack 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 clearly states the action ('Invite a person') and the resource (an organization you administer), plus the optional team assignment. It is specific enough to identify the tool's purpose, though it does not explicitly differentiate from sibling invite tools like createTeamInvite or bulkCreateTeamInvites.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 the tool: inviting someone to an organization the caller administers. It also provides crucial permission guidance by stating the required roles and the restriction that you cannot grant a role higher than your own, though it does not discuss alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listActiveClarityExportsList Active Clarity ExportsARead-onlyIdempotentInspect
List active (queued or running) Clarity export jobs for the current user
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the operation read-only, idempotent, and non-destructive. The description adds non-obvious behavioral context by scoping results to the current user and filtering to queued or running jobs, which is not captured by the annotations or input schema. It does not mention pagination or response details, but for a read-only list this is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tightly written sentence that front-loads the verb and resource and adds only the necessary status and scope qualifiers. There is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list operation with one optional, fully documented parameter and safety annotations already provided, the description and schema are sufficient for an agent to invoke the tool correctly. No output schema exists, but the return concept is clear from the name and 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 description coverage is 100%, and the team_id parameter is already thoroughly documented, including API key team pinning, omission behavior, and OAuth usage. The tool description adds no parameter-level detail, so it does not need to compensate for schema gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific verb ('List'), a specific resource ('Clarity export jobs'), and a clear scope ('for the current user'), while defining 'active' as 'queued or running'. This clearly distinguishes it from sibling tools like startClarityExport and getClarityExport.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: use this tool when you want to enumerate a user's active export jobs rather than starting a new export or fetching a single export. It does not explicitly name alternative tools or exclusion conditions, but the scope and status qualifier make the intended usage evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listAgentCaseTriggersList Agent Case TriggersARead-onlyIdempotentInspect
List the case triggers configured for an agent. Each trigger automatically dispatches the agent to run cases added to a queue.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | The agent's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered without contradiction. The description adds domain context about triggers dispatching the agent to run queued cases, but does not disclose tool-specific behavior such as result shape, ordering, or pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the main action front-loaded; the second sentence explains the trigger mechanism without redundancy. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read-only list tool with annotations covering side effects, the description is nearly complete: it names the resource, the scope per agent, and the trigger semantics. It could mention the returned list shape or absence of pagination, but 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 description coverage is 100% and the only parameter agent_id is already described as the agent's unique identifier. The description adds no parameter-level semantics, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and a specific resource ('case triggers configured for an agent'), and differentiates from sibling list tools via the 'case' qualifier (e.g., listAgentTriggers, listAgentTriggerTypes). The added behavior, auto-dispatch on queue addition, clarifies what these triggers are.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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: the tool is for viewing all case triggers belonging to an agent, and explains their queue-dispatch role. It does not explicitly name alternatives like listAgentTriggers or getAgentCaseTrigger or state when not to use them, so it falls short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listAgentFoldersList Agent FoldersBRead-onlyIdempotentInspect
List all agent folders for the authenticated team.
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description adds minimal new behavioral context. It clarifies the scope ('all', 'authenticated team'), but does not disclose output shape, ordering, or pagination. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It conveys the action, resource, and scope in nine words, earning its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list operation with one optional, well-documented parameter and annotations covering safety, the description and schema together provide enough to call it correctly. A small gap is the lack of any statement about the return value or whether the list is paginated, but this is minor for a list-all 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%, with the team_id parameter already thoroughly documented including auth fallback behavior. The tool description adds no parameter-level detail beyond the schema, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the specific action 'List', the resource 'agent folders', and the scope 'for the authenticated team'. This clearly identifies the tool's function and distinguishes it from create/update/delete folder siblings, though it does not explicitly name an alternative tool for comparison.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus related listing tools such as listAgents or listClarityFolders, or when to omit vs pass team_id. The only context is 'for the authenticated team', which implies a default team but offers no explicit selection criteria or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listAgentMemoryFilesList Agent Memory FilesBRead-onlyIdempotentInspect
List the memory files stored for an agent.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | The agent's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description does not contradict these annotations, but it also adds no additional behavioral context such as whether file contents are included, whether results are paginated, or what metadata is returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no redundant words or restatement of the tool name. Every word contributes to explaining what the tool does.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter, read-only listing tool with strong annotations, the description is nearly sufficient. It does not describe the return shape or pagination, and there is no output schema, but an agent can reasonably infer that the tool returns a list of memory file references for the given 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, agent_id, is documented as 'The agent's unique identifier.' The description adds no further meaning beyond the schema, so it meets the baseline but does not enrich parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 and resource: 'List the memory files stored for an agent.' It clearly conveys what the tool does and is specific enough to distinguish it from sibling tools like getAgentMemoryFile or listAgentFolders, though it does not explicitly differentiate itself by name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives such as getAgentMemoryFile or other listAgent* tools. It implies the tool lists all memory files for one agent, but it does not state exclusions, prerequisites, or when a sibling would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listAgentRevisionsList Agent RevisionsBRead-onlyIdempotentInspect
List revisions for an agent.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of revisions per page (1-100, default 20) | |
| offset | No | Number of revisions to skip | |
| agent_id | Yes | The agent's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds no behavioral context beyond the action itself, such as ordering of revisions, pagination behavior, or what data is included in the response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It communicates the core operation clearly and efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity, read-only list operation, the schema and annotations cover most invocation needs: the required agent_id and optional limit/offset are fully documented. The only minor gap is the lack of detail about revision ordering or return shape, which is not critical given the simple nature of 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?
Schema description coverage is 100%, with all three parameters documented including defaults and bounds. The description does not add additional semantic meaning beyond what the schema already provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'List revisions for an agent.' It is not a bare tautology and is distinguishable from related tools like getRevision, createRevision, and promoteRevision. However, it does not explicitly differentiate itself from alternatives or add scope details beyond the title.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives such as getRevision, listSkillRevisions, or promoteRevision. There is no mention of when this is the appropriate call or any exclusions, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listAgentsList AgentsBRead-onlyIdempotentInspect
List agents for your team.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of agents per page (1-100, default 20) | |
| offset | No | Number of agents to skip | |
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| automation_id | No | Only return agents belonging to this automation. | |
| include_schedules | No | Include the authenticated user's schedules for each agent in the response. Schedules are per-user, so this only returns schedules the current user owns. | false |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is well covered. The description adds only the 'for your team' scope and does not discuss pagination, team fallback behavior, or the per-user nature of included schedules; with annotations covering safety, this is a minor gap rather than a serious one.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with no filler or redundancy. It front-loads the core operation and remains appropriately concise for a straightforward list endpoint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with rich parameter descriptions and strong safety annotations, the description is mostly sufficient. It does not state that the result is paginated or that team_id is optional for API keys, but those details are already present in the schema, so the missing context is moderate rather than critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: all five parameters have descriptions, defaults, and constraints, including team_id's fallback behavior and include_schedules' per-user semantics. The tool description adds no parameter details, but because the schema carries the full burden, the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the verb 'List' with the resource 'agents' and the scope 'for your team', making it clear this is a read-only collection operation. It is not a tautology and is distinguishable from create/update/delete agent tools, though it does not explicitly differentiate from sibling list tools such as listQueueAgents or getAgent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. The description does not mention that getAgent is for a single agent, that listQueueAgents is queue-scoped, or when team_id should be supplied. The statement only restates the purpose, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listAgentSchedulesList Agent SchedulesARead-onlyIdempotentInspect
List all schedules configured for an agent. Returns the schedules you own on this agent.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | The agent's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds value beyond the annotations by disclosing the ownership scoping of results and confirming that the return payload is the set of schedules for that agent. There is no contradiction between the description and the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, roughly 15 words total, with the core action front-loaded and the ownership scoping in the second sentence. Every word earns its place; there is no redundancy with the title or 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 low-complexity read tool with one documented parameter, no nested objects, and annotations covering the safety profile, the description is complete. It states what is listed, on which agent, and with what ownership scope. No output schema exists, but the description adequately hints at the return value ('Returns the schedules you own').
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — the single agent_id parameter already has type, format (uuid), pattern, and a description ('The agent's unique identifier'). Per the baseline rule for high schema coverage, the tool description need not repeat parameter details; it only ties the parameter contextually via 'on this agent', which is marginal.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') with a clear resource ('schedules') and a precise scope ('configured for an agent'). It differentiates from sibling tools like createSchedule/updateSchedule/deleteSchedule by being the read operation, and the ownership qualifier ('the schedules you own') adds distinctive behavioral scope that makes it immediately distinguishable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 second sentence provides clear selection-relevant context: this tool only returns schedules the caller owns on the agent, which implicitly tells the agent not to use this if it needs all schedules regardless of ownership. However, it does not explicitly name alternatives or state when-not-to-use conditions relative to the sibling schedule mutation tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listAgentSlackBoundWorkspacesList Slack Workspaces Bound To An AgentARead-onlyIdempotentInspect
List the Slack workspaces bound to an agent build that you can create channel triggers for. Creating a Slack channel trigger for any other workspace is rejected, so start here to pick a valid slack_team_id and integration_instance_id.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | The agent's unique identifier | |
| build_id | Yes | The agent build (revision) whose bound connections to list |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds meaningful context beyond annotations: only workspaces bound to the agent build are valid, other workspaces are rejected, and the returned data includes slack_team_id and integration_instance_id.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The primary action is front-loaded, and the second sentence provides the critical usage constraint and the IDs to extract. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list operation with two well-documented UUID parameters and comprehensive annotations, the description is largely complete. It explains purpose, validity constraints, and the key output fields needed for downstream trigger creation, though it does not describe the full response shape or pagination behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters. The description reinforces that build_id selects the relevant agent revision, and it names the identifiers the caller needs to extract from the results, but it does not add substantial parameter-level detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: listing Slack workspaces bound to an agent build, and ties it to a concrete downstream purpose (creating channel triggers). This clearly distinguishes it from related tools like listAgentSlackTriggers or createAgentSlackTrigger.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 when-to-use guidance: 'start here' before creating a Slack channel trigger, because other workspaces are rejected. It clearly defines the selection condition, though it does not explicitly name sibling alternatives for adjacent operations like listing existing triggers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listAgentSlackTriggersList Slack Channel TriggersARead-onlyIdempotentInspect
List the Slack channel triggers you own on an agent (Agent in the Duvo UI), oldest first. Each trigger's filter_config carries the watched channelId, channelName, Slack workspaceId, and matchRule. Capped at 100 triggers per agent.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | The agent's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds valuable behavioral context beyond annotations: ordering ('oldest first'), the 100-trigger cap, and the specific filter_config fields returned (channelId, channelName, workspaceId, matchRule). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences, each contributing useful information: what is listed, what fields are returned, and the limit. The core action is front-loaded, with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only list tool, this description is complete. It covers scope, ordering, return-relevant fields, and the hard limit. With annotations covering safety/idempotency and the schema covering the parameter, nothing necessary for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully documents agent_id with a description and format, so baseline is 3. The description adds minor context by stating the list is per agent and owned by the caller, but it does not need to elaborate further given the high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'List the Slack channel triggers you own on an agent.' It clearly distinguishes this from generic trigger listings by specifying Slack channel triggers and the ownership scope. The title reinforces the same resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool—when you need to list Slack channel triggers for an agent—through its clear resource scoping. However, it does not explicitly contrast it with related siblings like listAgentTriggers, listAgentTriggerTypes, or createAgentSlackTrigger, nor does it state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listAgentSuggestionsList Agent SuggestionsARead-onlyIdempotentInspect
List an Agent's suggestions. status=pending is the inbox; status=history is consumed/dismissed/auto-cleared. Reads lazily auto-clear stale pending items.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| status | No | pending | |
| agent_id | Yes | The Agent's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds valuable context beyond annotations by disclosing that the read 'lazily auto-clear[s] stale pending items,' which is a non-obvious behavioral trait. It does not contradict the annotations, though the auto-clear wording introduces slight ambiguity about whether actual mutation occurs.
Agents need to know what a tool does to the 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 with no wasted words. The core purpose is front-loaded, followed by the status semantics, and then the behavioral note about lazy auto-clearing. Each sentence contributes distinct information needed for correct invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the key domain semantics (status meanings), the lazy auto-clear behavior, and the annotations cover safety. With no output schema, the return format is not described, but list tools with sibling getAgentSuggestion provide enough context. Minor gap: pagination behavior of limit/offset is not explicitly connected to the list semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25% (agent_id documented), but the description compensates for the most semantically important parameter by explaining what the status enum values mean in domain terms ('inbox' vs 'consumed/dismissed/auto-cleared'). limit and offset are conventional pagination parameters that are self-explanatory, and agent_id is covered in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource pair, 'List an Agent's suggestions,' which clearly distinguishes this from sibling tools like getAgentSuggestion (single retrieval) and listAgents (different entity). It further disambiguates purpose by explaining the two status filter values, making the tool's intent 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 gives concrete guidance on when to use each status value: 'pending is the inbox; history is consumed/dismissed/auto-cleared.' This is actionable context for choosing the right filter. It does not explicitly name alternatives or exclusion conditions, but the status guidance provides sufficient usage direction for a list tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listAgentTriggersList Agent TriggersARead-onlyIdempotentInspect
List the trigger definitions the authenticated user owns on an agent (Agent in the Duvo UI). Triggers start a Run automatically when an external event fires (e.g. an email arrives or a Linear issue is created).
| Name | Required | Description | Default |
|---|---|---|---|
| agentId | Yes | The agent's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior. The description adds useful context: only triggers the authenticated user owns are returned, and triggers start Runs on external events such as email arrivals or Linear issue creation. This goes beyond the structured fields without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with the purpose front-loaded; the trigger definition and examples earn their place. 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 one-parameter read-only list with rich annotations, the description is nearly complete: it names the resource, ownership scoping, and event semantics. It omits an explicit return-shape or pagination note and sibling differentiation, but these are minor for a simple list tool with no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has only agentId with a clear description and 100% coverage, so the schema carries the parameter meaning. The description's 'on an agent' loosely maps to agentId but adds no format or nuance beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the verb 'List' and the resource 'trigger definitions the authenticated user owns on an agent,' with a parenthetical clarifying 'Agent' as the Duvo UI entity. It does not explicitly distinguish itself from sibling tools listAgentCaseTriggers or listAgentSlackTriggers, leaving a small ambiguity about whether it returns all trigger types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus listAgentCaseTriggers, listAgentSlackTriggers, or listAgentTriggerTypes. The description explains what a trigger is but not when this generic listing is preferred, so the agent is left to infer routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listAgentTriggerTypesList Agent Trigger TypesARead-onlyIdempotentInspect
List the trigger types available for an agent, grouped by integration. Use the returned integration_slug and trigger_type values when creating a trigger.
| Name | Required | Description | Default |
|---|---|---|---|
| agentId | Yes | The agent's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds value beyond those annotations by disclosing that results are scoped per agent ('available for an agent') and organized by integration, revealing return-structure traits not present in the structured metadata.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero filler. The primary action is front-loaded in the first sentence, and the second delivers actionable downstream guidance (`integration_slug`, `trigger_type`) that directly supports trigger creation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter, read-only, idempotent tool with complete schema coverage and safety annotations, the description is nearly sufficient: it names the key returned fields and their downstream use. The only gap is not explicitly disambiguating this from the crowded sibling set of trigger-related list tools, though 'trigger types' vs. configured triggers makes the distinction inferable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — agentId is fully documented with type, format, pattern, and description, so the schema carries the parameter-documentation burden. The description only marginally reinforces that results are scoped by agentId ('available for an agent') and adds no new parameter-level meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), resource ('trigger types available for an agent'), and result shape ('grouped by integration'). It conveys that this is a reference catalog of available types rather than a list of configured triggers, which differentiates it semantically from siblings like listAgentTriggers and listAgentSlackTriggers, though it does not name them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence tells the agent what to do with the output ('Use the returned `integration_slug` and `trigger_type` values when creating a trigger'), establishing this as a prerequisite lookup before createAgentCaseTrigger, createAgentSlackTrigger, or upsertAgentTrigger. It implies the usage context clearly but provides no explicit when-not-to-use guidance or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listAutomationsList AutomationsARead-onlyIdempotentInspect
List the team's automations, each with its live agent and queue counts. An automation is the workspace container an agent or queue belongs to on a team that has moved to Automations — its id is what POST /queues and POST /agents need as automation_id.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of automations per page (1-250, default 250) | |
| offset | No | Number of automations to skip | |
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. |
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 beyond that by stating that results include live agent and queue counts and by explaining the semantic role of an automation id. It does not disclose pagination behavior, but the schema covers the pagination parameters, so the added context is sufficient for a safe read-only 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 tightly written sentences: the first states the action and result shape, the second explains the domain concept and why the returned id matters. There is no filler, and the most actionable information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with no output schema and three fully documented parameters, the description covers the return content (automations with agent and queue counts) and the key domain context (automation_id). It stops slightly short of explicitly stating the full response shape, such as id/name fields, but nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters (limit, offset, team_id) are already fully documented in the schema. The description does not repeat parameter-specific details, and the automation_id explanation applies to the tool's output rather than to any parameter. Baseline 3 is appropriate because the schema carries the parameter burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('the team's automations') and adds concrete detail: each automation comes with its live agent and queue counts. It also defines what an automation is and distinguishes it from agents/queues as a containing workspace, which differentiates it from sibling tools like listAgents and listQueues.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 the tool is useful: it identifies the workspace-container role of an automation and tells the caller that the automation id is required by POST /queues and POST /agents as automation_id. It does not explicitly name alternatives like getAutomation or state when not to use this tool, but the use case is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listAvailableClarityProcessLabelsList Available Clarity Process LabelsCRead-onlyIdempotentInspect
List process tags available for a process.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| limit | No | ||
| offset | No | ||
| search | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds only the scoping notion 'for a process' but does not explain what 'available' means, whether it includes already-assigned labels, what the response contains, or how pagination and search behave.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence with no filler or redundancy. It is front-loaded with the action and resource, though its brevity borders on under-specification.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 four parameters, zero schema descriptions, no output schema, and a close sibling tool, the description is too thin to be complete. The meaning of 'available', the role of the process id, and the optional parameters are all left undefined.
Complex tools with many parameters or behaviors need more documentation. Simple 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 compensate. It never explains the required 'id', the optional 'limit', 'offset', or 'search' parameters, leaving the agent without semantic guidance for any of the four inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('process tags available for a process'), which is enough to convey the core action. It does not explicitly distinguish itself from the sibling 'listClarityProcessLabels', so an agent could confuse the two without deeper inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus the closely named sibling 'listClarityProcessLabels' or related label tools like 'assignClarityProcessLabels'. No context or exclusions are provided, leaving the selection entirely to the agent's interpretation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listCaseAttachmentsList Case AttachmentsARead-onlyIdempotentInspect
List the files attached to a case, oldest first. Includes attachments whose upload failed, so a missing source document is visible rather than silent.
| Name | Required | Description | Default |
|---|---|---|---|
| case_id | Yes | The case's unique identifier | |
| queue_id | Yes | The queue's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the operation read-only, idempotent, and non-destructive. The description adds valuable non-obvious behavior beyond annotations: results are ordered oldest-first, and failed uploads are included so missing documents are visible. This is meaningful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences front-load the core purpose and ordering, then add a single high-value behavioral caveat about failed uploads. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the read-only annotations, 100% parameter schema coverage, and straightforward list operation, the description is complete enough. It covers ordering, the unusual inclusion of failed uploads, and aligns with the tool's obvious use case; no output schema exists, so return-shape documentation is not required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions for both case_id and queue_id, so the baseline of 3 applies. The description adds no extra meaning about the parameters, neither queue_id's role nor any format details beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and a precise resource ('files attached to a case'), and adds ordering ('oldest first'). It also distinguishes itself from generic case tools and related attachment operations by calling out failed uploads.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is clear: call this when you need the files attached to a case, including checking for missing or failed source documents. It does not explicitly name alternatives or when-not-to-use, but the scope statement is specific enough to route an agent correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listCaseLabelsList Case LabelsARead-onlyIdempotentInspect
List all labels assigned to a case.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of labels per page (1-1000, default 1000). | |
| offset | No | Zero-based offset for pagination. | |
| case_id | Yes | The case's unique identifier | |
| queue_id | Yes | The queue's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds the case-scoping behavior but does not mention pagination behavior despite the limit and offset parameters and the word "all" implying a complete result set. 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 short sentence with no filler, clearly front-loading the core purpose. Every word contributes to understanding the operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is relatively simple and the schema covers parameters thoroughly, but the description lacks any mention of pagination or that the result may be limited by the default limit of 1000. With no output schema, "List all labels" could be slightly misleading without explicit note that pagination is controlled by limit/offset.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters. The description adds minimal value here; it implies case_id identifies the case but does not elaborate on queue_id's role or the pagination 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 is a specific verb+resource statement: "List all labels assigned to a case." It clearly identifies the operation (list), the resource (labels), and the scope (a specific case). This distinguishes it from sibling label-related tools like assignCaseLabels and unlinkCaseLabels, which denote mutations, and listQueueLabels, which targets a different 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 use when you need to retrieve labels for a given case, but it provides no explicit when-to-use guidance or exclusions. It does not name alternatives such as assignCaseLabels, unlinkCaseLabels, or listQueueLabels, leaving the agent to infer selection based solely on the tool name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listCaseRunRecentMessagesList Case Run Recent MessagesARead-onlyIdempotentInspect
Return the latest qualifying messages (assistant text + tool calls) for a Run on a case, newest last. Used to populate the live body of an active Run card in the case Activity timeline.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of qualifying messages to return. Defaults to 3, must be between 1 and 10. | |
| run_id | Yes | The agent run's unique identifier | |
| case_id | Yes | The case's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare read-only and idempotent behavior, and the description adds filtering and ordering details but does not disclose any side effects, auth requirements, or rate limits. It adds some behavioral context beyond annotations, but not substantial new transparency about 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 two sentences, efficiently stating the operation's purpose and its intended use case. There is no redundant or filler content, and the essential 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?
The description provides enough context for an agent to invoke the tool correctly: it specifies the resource, scope, ordering, and even the content type ('assistant text + tool calls'). However, it does not define the exact meaning of 'qualifying' messages, which could lead to ambiguous expectations, and no output schema is provided, leaving return format partially unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of parameters with descriptive text (case_id, run_id, limit), so the description does not need to add parameter meaning. The baseline score of 3 applies because schema coverage is high and no additional parameter context 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 operation returns the latest qualifying messages for a run on a case, with a specific ordering (newest last). It also names the resource and scope, but does not explicitly differentiate from the similar sibling listRunMessages, leaving slight ambiguity about 'qualifying' criteria.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 use case ('Used to populate the live body of an active Run card in the case Activity timeline') but does not explicitly state when not to use it or contrast with alternative tools like listRunMessages. The context implies a specific scenario but lacks direct exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listCaseRunsList Case RunsARead-onlyIdempotentInspect
List Runs (agent runs) that have claimed or received handover of a case, newest first. Capped at 50 ownership events.
| Name | Required | Description | Default |
|---|---|---|---|
| case_id | Yes | The case's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the safety profile (readOnlyHint=true, idempotentHint=true, destructiveHint=false), so the description correctly adds value beyond them: it discloses ordering ('newest first') and the hard limit ('Capped at 50 ownership events'). These are genuinely useful behavioral traits that the annotations do not express. 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 zero wasted tokens. The core purpose is front-loaded, the parenthetical '(agent runs)' disambiguates terminology against sibling listRuns, and the second sentence adds two concrete behavioral facts (ordering, cap). 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 list tool with rich annotations, this is nearly complete: purpose, scope, ordering, and limit are all stated. The only minor gap is that no output schema exists, so the return shape (what fields each run object contains) is left unspecified — but that is a modest omission for a straightforward list operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents case_id ('The case's unique identifier'). The description adds no parameter-level meaning beyond what the schema provides, which matches the baseline-3 expectation when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), a resource ('Runs (agent runs) that have claimed or received handover of a case'), and scoping criteria. The 'claimed or received handover' phrasing clearly distinguishes this tool from generic siblings like listRuns and listCaseRunRecentMessages, so an agent can tell them apart without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the usage context — this is the tool to use when you want runs that own or inherited a specific case, versus generic run listings. However, it never explicitly names alternatives (e.g., listRuns for all runs, getRun for a single run) or states when-not-to-use, leaving dispatch partially to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listCasesList CasesARead-onlyIdempotentInspect
List cases in a queue. Supports status, date-range, and free-text filters via query params. Set count_only=true to skip Case row selection and transformation. The normal response shape is returned with cases: [] and the matching total. For label filters, use POST /v2/queues/:queue_id/cases/search.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of cases per page (1-100, default 20). | |
| offset | No | Zero-based offset for pagination. | |
| search | No | Full-text search across case title and data. | |
| status | No | Filter by one or more status buckets (comma-separated). Values: all, pending, processing, needs_input, postponed, needs_review, resolved, canceled. `processing` covers both a case actively being worked and one waiting on its evaluation. | |
| sort_by | No | Field to sort by. Default: created_at. | created_at |
| priority | No | Filter by one or more priority levels (comma-separated). Values: none, medium, high. | |
| queue_id | Yes | The queue's unique identifier | |
| count_only | No | Skip row selection and enrichment. The normal list response shape is returned with an empty row array and the matching total. | false |
| sort_order | No | Sort direction. Default: desc. | desc |
| created_at_to | No | Return only cases created before this ISO-8601 timestamp. The upper bound is exclusive. | |
| updated_at_to | No | Return only cases updated before this ISO-8601 timestamp. The upper bound is exclusive. | |
| issue_severity | No | Filter by highest failing rubric severity (comma-separated). Values: critical, medium. Severity is a facet within the issues outcome, so it returns nothing when combined with a status bucket that excludes issues. `low` is not selectable: an all-low verdict is stored as success, so no case carries it. | |
| created_at_from | No | Return only cases created at or after an ISO-8601 timestamp or a lookback such as 24h or 7d. | |
| updated_at_from | No | Return only cases updated at or after an ISO-8601 timestamp or a lookback such as 24h or 7d. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the bar is lower. The description adds meaningful context by explaining that count_only=true skips Case row selection and transformation while still returning the normal response shape with cases: [] and the matching total.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences with no filler. The core action and key behavioral caveat about count_only are front-loaded, and the alternative endpoint is cleanly placed at the end.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 main purpose, the count_only behavior, and the label-filter alternative, which is strong for a read-only list operation with a fully documented schema. It does not describe the normal response envelope or case fields, but that gap is minor given the absence of an output schema is partially mitigated by the operation's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents every parameter thoroughly. The description only summarizes filter categories at a high level and does not add detail beyond what the parameter descriptions provide, which matches the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Begins with a specific verb and resource: 'List cases in a queue,' and immediately defines the filtering scope via status, date-range, and free-text query params. It also distinguishes itself from the search endpoint by explicitly directing label-filter use to POST /v2/queues/:queue_id/cases/search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 routing guidance: use this tool for queue listing with status/date/free-text filters, and use the search endpoint when label filters are needed. It does not enumerate every alternative such as exportCases or getCase, but the primary when-not condition is explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listClarityArtifactChatConversationsList Clarity Artifact Chat ConversationsARead-onlyIdempotentInspect
List the current user's recent non-deleted artifact-chat conversations for a Clarity v2 process and snapshot kind.
| Name | Required | Description | Default |
|---|---|---|---|
| process_id | Yes | The Clarity process id | |
| snapshot_kind | Yes | Artifact kind to list conversations for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is well covered. The description adds meaningful behavioral context beyond annotations by specifying 'current user's', 'recent', and 'non-deleted', which tell the agent this is a filtered read operation rather than a full dump of all conversations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, no filler, and the core action and resource are front-loaded. The scoping qualifiers ('current user's recent non-deleted', 'Clarity v2 process and snapshot kind') earn their place because they materially narrow what the tool returns.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list operation with two well-documented parameters and safety annotations, the description is largely sufficient. It does not describe the response shape or pagination, but output schema is absent and list-tool return values are generally predictable from the resource name.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and both process_id and snapshot_kind already have clear descriptions plus an enum for snapshot_kind. The description reinforces that these parameters identify the process and snapshot kind but adds no new semantic detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List'), a precise resource ('artifact-chat conversations'), and clear scoping ('current user's recent non-deleted', 'for a Clarity v2 process and snapshot kind'). This clearly distinguishes it from siblings like getClarityArtifactChatMessages (messages, not conversations) and deleteClarityArtifactChatConversation (deletion, not listing).
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 retrieving conversation summaries for a given process and snapshot kind, but it does not explicitly say when to prefer this over alternatives like getClarityArtifactChatMessages or listClarityProcessSnapshots. It provides clear context about scope (current user, non-deleted, recent) but no exclusions or routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listClarityExtraCaptureRequestsList Clarity Extra Capture RequestsARead-onlyIdempotentInspect
List active extra-capture requests for a given automation proposal of a Clarity v2 process. The caller is expected to know the proposal id from the V2 read model and skip the call when no proposal exists yet.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of results per page (1-100, default 20) | |
| offset | No | Number of results to skip (default 0) | |
| process_id | Yes | The clarity process id | |
| transformation_proposal_id | Yes | The automation proposal id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive behavior, so the description does not need to restate safety. It adds useful behavioral context beyond annotations: the tool returns only 'active' requests, and the caller must already have a proposal id and should avoid calling when no proposal exists. This helps prevent misuse.
Agents need to know what a tool does to the 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 with clear front-loading: the first sentence states what the tool does, and the second gives a crucial precondition for correct usage. No filler or redundant restatement of the title or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list operation with well-documented parameters and safety annotations, the description is nearly complete. It covers the main precondition and clarifies the 'active' filter. The only minor gap is that 'extra-capture requests' and the 'V2 read model' are treated as known domain concepts, but this is acceptable given the surrounding tool context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents process_id, transformation_proposal_id, limit, and offset. The description adds domain context by explaining the transformation_proposal_id is for an automation proposal, but it does not provide additional semantic value beyond what the parameter descriptions already 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 states a specific action ('List active extra-capture requests') and a specific resource scope ('for a given automation proposal of a Clarity v2 process'). It clearly differentiates this from siblings like assignClarityExtraCaptureRequest and listClarityLandscapeCaptures by focusing on extra-capture requests tied to an automation proposal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 practical when-to-call guidance by telling the caller they need to know the proposal id from the V2 read model and should skip the call when no proposal exists yet. It does not name alternatives, but this is a fairly narrow list operation where the main usage risk is calling it prematurely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listClarityFoldersList Clarity FoldersBRead-onlyIdempotentInspect
List the team's process folders with process and suggestion counts
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is read-only, idempotent, and non-destructive, so the description only needs to add extra behavioral context. It adds that results include process and suggestion counts, but does not mention pagination, ordering, or access limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. It names the verb, resource, scope, and output in one efficient statement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list operation with one optional parameter and strong annotations, the description is mostly sufficient. It identifies scope and output counts, though the absence of an output schema means return-shape details like pagination or response structure are left unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter team_id is already fully described in the schema with UUID format, fallback behavior, and API key versus OAuth semantics. The description itself adds no parameter-level meaning, but 100% schema coverage makes that acceptable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action ('List') and resource ('the team's process folders'), and adds the output detail of process and suggestion counts. It is distinguishable from related tools like listClarityProcesses, though it does not explicitly name or contrast a sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus alternatives, or when not to use it. The team_id parameter description covers authentication behavior but not selection criteria, so the agent must infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listClarityLandscapeCapturesList Clarity Landscape CapturesARead-onlyIdempotentInspect
List the organization's Process Landscape captures. By default, only captures eligible to seed new process proposals are returned; excluded captures can be included for inspection.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of captures to return (1-200, default 100) | |
| orgId | Yes | ||
| include_excluded | No | Include captures excluded from Process Landscape analysis | false |
| includeTranscripts | No | Include full capture transcripts (large); off by default. Pass the literal string 'true' or 'false' (z.coerce.boolean treats any non-empty value, including 'false', as true). | false |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is read-only, idempotent, and non-destructive, so the description does not need to restate those. It adds valuable behavioral context beyond the annotations by explaining the default eligibility filtering and that excluded captures can be included for inspection. This helps the agent predict the tool's default behavior without needing to infer it from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The first sentence front-loads the action and resource, and the second sentence adds the most important behavioral nuance about default filtering and excluded captures. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list operation, the description plus schema and annotations cover the core invocation needs: required orgId, optional pagination, excluded-capture inclusion, and transcript inclusion. It does not describe return shape, ordering, or pagination behavior, but those are not essential for a simple list call, especially given the strong schema documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75%, and the schema already documents limit, include_excluded, and includeTranscripts, including the important string 'true'/'false' coercion warning. The tool description does not add parameter-level meaning, but the one less-documented parameter, orgId, is a required UUID that is self-explanatory. This is adequate but not exceptional.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List') and a specific resource ('the organization's Process Landscape captures'), which clearly identifies the entity being retrieved. It also adds a distinguishing behavioral detail—default filtering to captures eligible to seed new process proposals—that separates it from generic capture or process listing 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 gives clear context for when the tool is appropriate: listing Process Landscape captures, with the default returning only eligible captures and excluded captures available for inspection. It does not explicitly name sibling alternatives or state when not to use the tool, so it falls short of the top score, but the context is clear enough for an agent to understand the intended use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listClarityLandscapeNodeInterviewsList Clarity Landscape Node InterviewsBRead-onlyIdempotentInspect
List Clarity interviews linked to a process folder
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of interviews per page (1-100, default 50) | |
| orgId | Yes | The organization ID | |
| nodeId | Yes | The clarity process folder node ID | |
| offset | No | Number of interviews to skip |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile with readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds the scoping behavior that interviews are linked to a process folder, but it does not disclose return format, pagination behavior, or any other operational details beyond what the schema already provides.
Agents need to know what a tool does to the 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: it starts with the verb and object, then states the scope. There is no redundant wording or filler; every word contributes to the meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list operation with well-documented parameters and strong annotations, the description covers the essential purpose and scope. It lacks output-shape details and explicit sibling differentiation, but the tool is simple enough that an agent can invoke it correctly with the required 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?
The input schema has 100% description coverage: orgId, nodeId, limit, and offset all have descriptive text. The tool description adds no additional parameter-level meaning, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), a resource ('Clarity interviews'), and a scope ('linked to a process folder'), which conveys the basic operation. It does not explicitly name sibling alternatives or define what a 'process folder' is in relation to a landscape node, but the purpose is reasonably clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance about when to use this tool versus related siblings such as listClarityOrganizationInterviews, listClarityTeamInterviews, or listClarityLandscapeCaptures. The phrase 'linked to a process folder' implies a use case, but there are no explicit selection criteria, exclusions, or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listClarityLandscapeNodePeopleList Clarity Landscape Node PeopleARead-onlyIdempotentInspect
List the people involved in the process behind one process landscape node. To read the people across the whole landscape in one request, use getClarityHierarchyPeople instead.
| Name | Required | Description | Default |
|---|---|---|---|
| orgId | Yes | ||
| nodeId | Yes | A process landscape node that is linked to a real process. | |
| teamId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint, idempotentHint, and destructiveHint, so safety is well established. The description adds useful scoping context (single node vs whole landscape) but does not describe return shape, pagination, or whether the result includes only directly assigned people or also inherited roles. It adds some context but not rich behavioral detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler. The core purpose is front-loaded in the first sentence, and the alternative tool is presented concisely in the second. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list operation with strong annotations, the description covers the essential scope and sibling differentiation. It does not describe return fields, but there is no output schema and the operation is simple enough that the absence of return-value detail is not a critical gap. Minor param ambiguity holds it back from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33%, with orgId and teamId undocumented. The description only loosely clarifies nodeId's role as 'one process landscape node' but does not explain what orgId or teamId mean, how they constrain results, or why teamId is optional. With low schema coverage, the description needed to compensate more.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('people involved in the process behind one process landscape node'), clearly identifying the scope as a single node. It also distinguishes itself from getClarityHierarchyPeople by explicitly naming the sibling it is not.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool (for one process landscape node) and when to use the alternative (getClarityHierarchyPeople for people across the whole landscape). This is direct, actionable routing guidance with no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listClarityOrganizationInterviewsList Clarity Organization InterviewsBRead-onlyIdempotentInspect
List Clarity interviews across an organization
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| orgId | Yes | ||
| scope | No | ||
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description does not need to restate safety. It adds only the organization-wide scope and gives no detail about pagination, filtering, or response shape, but that is acceptable given the annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no redundant words. It is concise, though it sacrifices useful detail for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with a schema that defines defaults and enums, this is minimally adequate. However, it omits the existence of team-scoped listing, pagination behavior, and any indication of what the response contains, so it is not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description does not explain limit, offset, scope, or orgId. The phrase 'across an organization' hints at orgId, but the description fails to compensate for the undocumented parameters or clarify the team/organization scope enum.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear verb ('List') and names the resource ('Clarity interviews') plus an organization scope. It does not explicitly differentiate from the sibling listClarityTeamInterviews or the singular getClarityOrganizationInterview, so it misses the top tier.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to call this tool instead of listClarityTeamInterviews, getClarityOrganizationInterview, or other interview-related tools. The agent must infer from the name and schema that organization-level listing is intended.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listClarityProcessAssignedLabelsList Clarity Process Assigned LabelsARead-onlyIdempotentInspect
List process tags on a process.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds process scoping but does not disclose return shape, pagination, or empty-result behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, compact sentence with no filler words. The verb and object are front-loaded, and every word adds meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only tool, the description is minimally adequate, but it is sparse within a large family of similar label-related tools. With no output schema and no sibling differentiation, an agent has limited guidance on expected results or selection among alternatives.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides no description for the id parameter (0% coverage), and the description only vaguely clarifies that the operation happens 'on a process.' This is enough to infer id is the process identifier, but it does not go further.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), a resource ('process tags/labels'), and a scope ('on a process'). It is clear and not a tautology, though it could better differentiate itself from sibling tools like listClarityProcessLabels and listAvailableClarityProcessLabels.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 list labels assigned to a particular process, but it does not explicitly state when to choose this tool over related siblings such as listAvailableClarityProcessLabels or listClarityProcessLabels.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listClarityProcessesList Clarity ProcessesARead-onlyIdempotentInspect
List Clarity processes for the current team, most recently updated first. Returns lightweight metadata (capture counts, contributors, status) suitable for building a picker; the per-process read model is available via GET /v2/teams/:team_id/clarity-v2/processes/:process_id for v2 rows and GET /v2/teams/:team_id/clarity/processes/:id for legacy v1 rows. Both v1 (legacy) and v2 processes are returned by default; use search, status, and version to narrow discovery. Capped at 100 per page.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of processes per page (1-100, default 50) | |
| offset | No | Number of processes to skip (default 0) | |
| search | No | Case-insensitive search across process names | |
| status | No | Filter by process lifecycle status | |
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| version | No | Filter by Clarity process schema version: 1 legacy, 2 v2 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/safe, and the description adds meaningful behavioral information: default inclusion of both v1 and v2 processes, ordering, return shape ('capture counts, contributors, status'), and the 100-per-page cap. No contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, front-loaded with the action and ordering, and each sentence adds a distinct useful fact: output shape, drill-down alternative, filtering behavior, and pagination cap. 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?
Despite having no output schema, the description discloses the nature of the returned metadata, ordering, default version behavior, filtering options, pagination cap, and how to get the full per-process model. This is enough 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?
Schema coverage is 100%, and each parameter already has a clear description, including team_id's OAuth nuance and status enum values. The description adds only light extra guidance by grouping search/status/version as discovery filters and mentioning the page cap; the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List Clarity processes for the current team') plus a concrete ordering ('most recently updated first'). It also distinguishes itself from per-process reads by explicitly saying it returns lightweight picker metadata rather than the full read model.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 for when to use it: 'suitable for building a picker', and routes the agent to GET endpoints for the full per-process read model. It also explains that search/status/version narrow discovery and that results are capped at 100 per page. It does not explicitly contrast with the sibling listClarityProcessSummaries tool, so it stops just short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listClarityProcessLabelsList Clarity Process LabelsBRead-onlyIdempotentInspect
List process tags available in an organization.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| orgId | Yes | ||
| offset | No | ||
| search | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the read-only nature is established by structured data. The description adds only the organizational scope ('available in an organization'), which is mildly useful but does not disclose pagination, filtering, or what 'available' means.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler, and every word carries purpose. It is concise, though the 'tags' versus 'labels' wording creates minor ambiguity and the terseness contributes to incomplete guidance elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with four parameters, no output schema, and no parameter descriptions, this minimal description is not complete. It fails to clarify the search and pagination parameters, what 'available' means, or how this tool relates to similarly named sibling tools, leaving an agent to guess.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the four parameters, but it only hints at orgId via 'in an organization.' It provides no meaning for limit, offset, or search, leaving the agent without guidance on how pagination and filtering work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), resource ('process tags'), and scope ('in an organization'), making the basic purpose clear. However, it uses 'tags' instead of 'labels' and does nothing to distinguish this tool from the near-identical sibling listAvailableClarityProcessLabels, so it misses the top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'available in an organization' implies this is the tool to use when retrieving org-scoped process labels, so there is some implicit usage guidance. But there are no explicit when-to-use conditions, no exclusions, and no mention of alternatives such as listClarityProcessAssignedLabels or listAvailableClarityProcessLabels.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listClarityProcessLinksList Clarity Process LinksARead-onlyIdempotentInspect
List process-to-process links in the organization's Clarity landscape that are visible within the caller's team access scope. Use node_id to find links touching a specific process node.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of links per page (1-500, default 100) | |
| orgId | Yes | ||
| offset | No | Number of links to skip (default 0) | |
| node_id | No | Only return links that touch this hierarchy process node |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds meaningful behavioral context beyond annotations by stating that results are scoped to 'the caller's team access scope,' which is not visible in the schema or 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. The core operation is front-loaded, the access scope follows immediately, and the node_id hint is a single actionable sentence. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list operation, the annotations cover safety/idempotence, the schema covers pagination and filtering parameters, and the description covers access scoping. No output schema is present, but the list nature of the tool plus the existing coverage makes the definition adequately complete 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?
The schema already documents limit, offset, and node_id with descriptive text, giving 75% coverage. The description reinforces node_id's filtering purpose, but adds little new parameter-level meaning beyond what the schema provides. orgId remains understandable as the organization identifier from context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'List process-to-process links' in the Clarity landscape, which clearly distinguishes links from process nodes. This differentiates it from sibling tools like createClarityProcessLink, deleteClarityProcessLink, and listClarityProcesses.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 verb 'List' and resource 'links' imply a read-only listing use case, and the node_id guidance is useful for filtering. However, the description does not explicitly contrast this tool with alternative link-related tools (create/update/delete) or mention when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listClarityProcessMembersList Clarity Process MembersARead-onlyIdempotentInspect
List users with accepted access to a clarity process
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Clarity process ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the useful qualifier 'accepted access,' which clarifies that pending join requests are not included, but it does not disclose pagination, ordering, or other list behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler or repeated terminology. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only listing tool, the description plus annotations and schema are sufficient. No output schema is expected to be documented here, and the 'accepted access' qualifier supplies the key semantic distinction.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'id' has 100% schema description coverage with format and pattern constraints. The tool description adds no parameter-level meaning beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'List users with accepted access to a clarity process.' It is not tautological and conveys the core operation, though it does not explicitly differentiate itself from related tools such as acceptClarityProcessJoin or listClarityProcesses.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to choose this tool over alternatives, no mention of pending versus accepted invitations, and no exclusions or preconditions. An agent is left to infer the appropriate use case from the name and description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listClarityProcessSnapshotsList Clarity Process SnapshotsBRead-onlyIdempotentInspect
List lightweight Clarity v2 process snapshots for one kind.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Snapshot kind to list | |
| limit | No | ||
| offset | No | ||
| process_id | Yes | The clarity process id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already disclose read-only, idempotent, non-destructive behavior. The description adds the qualifier 'lightweight', which hints at a reduced payload but does not elaborate on response structure or any side effects. No contradiction exists, but the description contributes minimal behavioral insight 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 a single, concise sentence that avoids redundancy and directly states the action and object. It is well-structured and easy to parse, with 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?
The tool has no output schema, and the description does not mention the return format, pagination behavior, or error conditions. It also fails to clarify what 'lightweight' means in terms of data omitted. Given the lack of an output schema, this missing information is critical 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 input schema provides descriptions for 'process_id' and 'kind', but 'limit' and 'offset' lack descriptions despite having defaults and constraints. The tool description does not augment these parameters or explain their role (e.g., pagination). The enum for 'kind' is clear, but the overall parameter semantics are incomplete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('List') and resource ('Clarity v2 process snapshots') with a scoping qualifier ('for one kind'). It distinguishes this from other list tools by specifying the snapshot type, and the resource is not ambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any guidance on when to use this tool versus alternatives. There are many list-related sibling tools (e.g., listClarityProcesses, listClarityProcessSummaries) and a getClarityProcessSnapshot for retrieving a single snapshot, but no comparison or condition is mentioned. Users must infer the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listClarityProcessSummariesList Clarity Process SummariesARead-onlyIdempotentInspect
Cross-process portfolio digest for every completed Clarity process on the team: per-process summary, SWOT, projected impact, and a step skeleton (role, system, and flow edges) — without step prose or source excerpts. Paginated (default 5, max 10). Use this to answer portfolio-wide questions in one pass; fetch a single process's full detail via getClarityProcessSnapshot only for the few that matter.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Processes per page (1-10, default 5). Keeps the response under the MCP output cap. | |
| detail | No | skeleton = + per-step role/system/flow edges (default); summary = summary+SWOT+impact only (cheaper, for pure ranking). | skeleton |
| offset | No | Processes to skip (default 0). | |
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| include_current_steps | No | Include the as-is (current) step skeleton too. Default false = proposed (to-be) steps only. Pass the literal string 'true' or 'false' (z.coerce.boolean treats any non-empty value, including 'false', as true). | false |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal readOnly, idempotent, and non-destructive behavior. The description adds useful behavioral context beyond that: the tool only covers completed processes, it is paginated with defaults, and it excludes certain content types. This is meaningful added context 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 tight and front-loaded: it leads with the tool's core purpose and return contents, then quickly explains pagination and gives the key routing guidance. No sentences are wasted and the most important discriminator is stated early.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, no-required-param, paginated list tool, the description is complete: it names the return contents, scoping, pagination behavior, and the correct alternative for single-process detail. The absence of an output schema is compensated by the explicit enumeration of the response fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters well. The description restates pagination defaults that appear in the schema and does not add substantial new meaning to any specific parameter. Baseline 3 is appropriate because the schema carries the burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('cross-process portfolio digest') and enumerates exactly what it returns: per-process summary, SWOT, projected impact, and a step skeleton. It also distinguishes this tool from getClarityProcessSnapshot, which covers single-process detail, so an agent can select among 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 guidance: use this tool to answer portfolio-wide questions in one pass, and use getClarityProcessSnapshot only for the few processes that need full detail. It also states what this tool intentionally omits (step prose and source excerpts), which tells agents when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listClarityTeamInterviewsList Clarity Team InterviewsBRead-onlyIdempotentInspect
List team-level Clarity interviews
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of interviews per page (1-100, default 50) | |
| offset | No | Number of interviews to skip | |
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds no behavioral context beyond that, but it also does not contradict the annotations. The interesting behavioral nuance about team_id fallback and rejection lives in the schema, not the description, so no extra credit is warranted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero wasted words. It is appropriately terse for a simple list operation, though it is lean enough that some semantic context (what a Clarity interview is) is left to inference.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 paginated list tool with fully-documented optional parameters and annotations covering safety, the definition is largely sufficient. The main gaps are the absence of an output schema and a lack of clarification about the relationship between team-, organization-, and landscape-node interview listings, but these are minor for a straightforward read-only list operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all three parameters. The description itself adds nothing about parameters, which matches the baseline of 3 when the schema does the heavy lifting. The team_id description is notably rich but counts as structured data, not description 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 states a specific verb and resource: 'List team-level Clarity interviews'. The 'team-level' qualifier distinguishes it from closely named siblings like listClarityOrganizationInterviews and listClarityLandscapeNodeInterviews, though it never explicitly names or contrasts 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 offers no guidance on when to use this tool versus its alternatives. It does not mention the related organization-level or landscape-node interview listing tools, nor any condition that would select one over another. The 'team-level' phrasing implies a scope but provides no actionable routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listConnectionsList ConnectionsARead-onlyIdempotentInspect
List the authenticated user's connections (connected integration instances) for the current team. Includes team-shared instances visible to the caller when the org-level Connections sharing setting is on. Filter by integration type with the type query parameter.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | ||
| limit | No | ||
| offset | No | ||
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations declare readOnly, idempotent, and non-destructive, which align with the description. The description adds a behavioral note about visibility depending on the sharing setting, but it does not disclose potential errors (e.g., invalid team rejection) or response behavior in edge cases, leaving some transparency gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that conveys the core function and the filter option without unnecessary verbosity. It is easy to read and understand.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description does not mention the response format, pagination behavior, or error conditions. While limit/offset parameters imply pagination, the absence of any output information leaves the tool's full context incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 25% (only team_id has a description). The tool description explains the 'type' parameter's purpose but leaves 'limit' and 'offset' unexplained. Since the schema does not cover these parameters and the description does not compensate, parameter semantics are inadequately defined.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: listing the authenticated user's connections for the current team, with an explicit filter option. It uses a specific verb ('List') and resource ('connections'), distinguishing it from similar tools like listIntegrations or listRevisionIntegrationConnections.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 context on when to use the tool, such as clarifying that it lists connections for the current team and respects the org-level sharing setting. It also mentions the type filter. However, it does not explicitly contrast with alternative listing tools, 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.
listCredentialsList credentials for user and teamARead-onlyIdempotentInspect
List browser-login credentials visible to the caller for the current team — team-shared (user_id IS NULL) plus the caller's own personal logins. Optionally filter by domain. Passwords and OTP secrets are never returned; only metadata flags indicating whether they are set.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | ||
| userId | Yes | ||
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly and idempotent, so the description is free to add behavioral value. It does: passwords and OTP secrets are never returned, only metadata flags indicating whether they are set. It also clarifies the visibility boundary. It omits pagination or ordering details, but the annotation coverage lowers the bar.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core scope and behavior, with no filler. The sensitive-data caveat is stated efficiently and the optional domain filter is mentioned without extra prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 result scope, the optional filter, and the important return-value constraint (no passwords/OTP). However, a required `userId` parameter is left essentially unexplained, which is a real gap for an agent trying to invoke the tool correctly. Without an output schema, more guidance on pagination or returned metadata fields would also be helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33%, so the description must compensate. It adds meaning for the optional `domain` parameter, but the required `userId` parameter is neither described in the schema nor explained in the description. The relationship between `userId`, the caller, and the current team remains ambiguous, and `team_id` semantics are left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the exact resource (browser-login credentials), the verb (list), and precisely scopes the result: team-shared credentials with user_id NULL plus the caller's personal logins. This clearly distinguishes it from credential or secret management siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context of when this tool is appropriate: listing credentials visible to the caller in the current team, with an optional domain filter. It does not explicitly name alternative tools or state when not to use it, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listFilesList FilesBRead-onlyIdempotentInspect
List files for the current team.
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds the 'current team' scoping, but does not disclose pagination, result format, or any access-related behavior. There is no contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler, and the verb and object are front-loaded. It is appropriately brief for a simple list operation, though the first two words largely mirror the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is low complexity, and the annotations plus schema cover safety and team_id semantics. However, with no output schema, the description does not explain what the returned file list contains (e.g., file names, metadata, pagination), leaving some ambiguity for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the team_id parameter is thoroughly documented, including fallback behavior for API keys and OAuth. The description adds little beyond 'current team', which aligns with the schema but does not need to repeat it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('List') and resource ('files') with a specific scope ('current team'). It is instantly distinguishable from unrelated sibling tools, though it does not explicitly differentiate itself from similarly named tools like listSandboxFiles or listSkillFiles.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives such as listSandboxFiles or getFileContent. The parameter schema explains team_id semantics, but the description itself provides no usage context, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listIntegrationsList IntegrationsARead-onlyIdempotentInspect
List the team's integration catalog: built-in integration types plus any custom connection types defined for the team. OAuth authorization flows are browser-based and cannot be performed via this API; use the Duvo dashboard to complete OAuth-based connections.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | ||
| limit | No | ||
| offset | No | ||
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior, so the description does not need to repeat those. It adds the meaningful caveat that OAuth authorization cannot be performed here. However, it does not disclose pagination behavior, ordering, or response structure, which would be useful given no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two tight sentences with no filler. The purpose is front-loaded, and the OAuth caveat is placed second where it naturally supports invocation decisions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 what the tool returns conceptually and warns about the OAuth limitation. But with no output schema and poor parameter documentation for 'type', an agent cannot fully understand filtering behavior. Since all parameters are optional, a valid call is still possible, but the ambiguity leaves a clear gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25%, and the tool description does not compensate. The 'type' parameter is completely undocumented in both the schema and description, leaving its allowed values ambiguous. Limit and offset are self-explanatory, and team_id is well-described in the schema, but the low coverage and missing 'type' semantics hurt agent confidence.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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-resource pair ('List the team's integration catalog') and enumerates what is included: built-in integration types and custom connection types. It is specific enough to distinguish from more generic list tools, though it does not explicitly contrast with siblings like listConnections or listRevisionIntegrations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit when-not-to-use directive: OAuth flows cannot be performed via this API and the Duvo dashboard should be used instead. This is concrete usage guidance, though it does not address when to prefer this tool over other integration-related list tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listMyOrganizationsList My OrganizationsARead-onlyIdempotentInspect
List the organizations the current user belongs to, with their role (organization:member, organization:admin, organization:owner, or organization:executive) and member count in each. Use this to check whether the user has an admin-or-above role before calling organization-scoped endpoints, which reject lower roles with 403.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate readOnly and idempotent behavior. The description adds that it returns roles and member counts, and scopes to the current user. It does not contradict annotations and provides useful output detail, though it could mention potential errors or edge 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?
The description is concise and well-structured, consisting of a clear listing statement and a usage note. No unnecessary verbosity 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?
Given there is no output schema, the description explains the return content (role and member count) and the practical context. It is complete for the tool's intended use, including the error condition it helps avoid.
Complex tools with many parameters or behaviors need more documentation. 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 no parameters, so the schema is fully covered (100%). The description does not need to explain parameter semantics, and the baseline for high coverage is 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 lists the organizations the current user belongs to, including role and member count. It also specifies a concrete use case (checking admin-or-above role) which distinguishes it from related tools like listMyTeams.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 to use this tool: to check if the user has an admin-or-above role before calling organization-scoped endpoints that reject lower roles with 403. This provides clear guidance on the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listMyTeamsList My TeamsARead-onlyIdempotentInspect
List teams the authenticated caller can act on. Team-scoped API keys see only the key's team; managed Ask Duvo keys stay within their origin boundary; human user-scoped API keys and OAuth callers see every team they're a member of.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is read-only, idempotent, and non-destructive. The description adds valuable behavioral detail beyond annotations by explaining auth-dependent visibility boundaries, which is important for setting caller expectations about the result set.
Agents need to know what a tool does to the 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 written sentence that leads with the core purpose and then provides the essential scoping nuance. Every clause adds meaningful information without unnecessary filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless, read-only list tool with strong annotations, the description is complete. It covers what the tool returns, which teams are visible under each auth context, and the operation's safety profile is already established by annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is no parameter semantics burden on the description. The baseline of 4 applies because the description is not required to compensate for undocumented parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the operation ('List teams') and the specific resource scope ('teams the authenticated caller can act on'). It further differentiates behavior across credential types, which distinguishes it from sibling list tools like listOrgTeams and listMyOrganizations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 about which teams will be returned for different authentication modes, making it evident this is the correct tool for listing personally accessible teams. It does not explicitly name alternatives or exclusion conditions, but the scoping rules effectively imply when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listNotificationsList NotificationsARead-onlyIdempotentInspect
List notifications for the authenticated user's current team, most recent first. Filter with type, unread, severity or minSeverity (mutually exclusive), important, agentRunId, or processId; paginate with limit/cursor. Pass batchId to list only the live members of a notification batch, optionally ordered by sort=importance (only valid together with batchId). Requires the Notification Center feature; returns 404 when it is not enabled for the team.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | importance orders by type importance then severity (only valid together with batchId); default recency. | recency |
| type | No | Only return notifications of this type. One of: connection_broken, case_failed, critical_case_issue, case_issue, critical_eval_issue, eval_issue, job_issue, job_done, background_job, schedule_issue, config_proposal. | |
| limit | No | Number of notifications per page (1-100, default 30). | |
| cursor | No | Opaque cursor from the previous page's nextCursor. Omit for the first page. | |
| unread | No | If true, only return unread notifications. | |
| batchId | No | Only return live members of this notification batch. | |
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| severity | No | Only return notifications with this severity. One of: info, warning, critical, success. | |
| important | No | If true, only return important notifications: unresolved connection_broken rows pinned until reconnected, removed, or dismissed. | |
| processId | No | Only return notifications about this Clarity process. | |
| agentRunId | No | Only return notifications about this agent run. | |
| minSeverity | No | Only return notifications at or above this urgency. Least to most urgent: success < info < warning < critical. Mutually exclusive with severity. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool read-only and idempotent, and the description adds non-trivial behavior: a 404 when Notification Center is disabled, cursor pagination, 'live members' batch semantics, and ordering guarantees. It goes well beyond the structured fields and does not contradict 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?
Three sentences pack purpose, filter options, pagination, batch mode, and error behavior with no filler. The core scoping detail is front-loaded before the filter enumeration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter, all-optional, no-output-schema read tool, the description plus rich schema and annotations covers what an agent needs to call it correctly: ordering, filters, pagination, batch restrictions, and failure mode. The explicit list-and-paginate semantics compensate for the 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?
Schema description coverage is 100%, so the baseline is 3. The description reinforces key constraints such as mutual exclusivity and the batchId/sort coupling, but it does not add substantial new meaning beyond the schema, such as team_id fallback semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb, resource, and scope ('List notifications for the authenticated user's current team, most recent first'), making the core operation unambiguous. It does not explicitly name sibling notification tools such as getNotificationFeed or getNotification, so differentiation is by implication rather than direct exclusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 in-tool guidance: severity and minSeverity are mutually exclusive, sort=importance is only valid with batchId, and the Notification Center prerequisite yields a 404. However, it never states when to prefer this over sibling notification tools, so usage-vs-alternatives is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listOrgTeamsList Org TeamsARead-onlyIdempotentInspect
List teams belonging to an organization you are a member of, including your membership and role in each.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of teams per page (1-100, default 50) | |
| orgId | Yes | Organization ID | |
| offset | No | Number of teams to skip | |
| search | No | Filter teams by name (case-insensitive substring match) | |
| sortBy | No | Sort order: createdAt (newest first, default) or name (alphabetical) | createdAt |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context: it returns the caller's membership and role per team and restricts listing to organizations the caller belongs to. It does not go into pagination or response structure, but that is a minor gap given the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every clause contributes meaning: listing teams, org membership scope, and the inclusion of membership/role in the response.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity, read-only list operation with a fully documented schema and safety annotations, the description is nearly complete. The only minor gap is that it does not explicitly state whether teams in the org where the caller lacks a team membership are still returned or how the role field behaves in that 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%, so all five parameters are already documented in the input schema. The description does not need to restate them and adds little beyond hinting at the orgId scope; 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 (List), a resource (teams), an owning scope (an organization you are a member of), and the additional data returned (your membership and role in each). This makes it clearly distinguishable from related siblings like getTeam, listTeamMembers, and listMyTeams.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 its use case by defining the org membership scope and the membership/role information returned. However, it does not explicitly contrast it with close siblings such as listMyTeams or getTeam, nor does it state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listPluginCatalogList Plugin CatalogARead-onlyIdempotentInspect
List plugins that can be referenced by name in a build's plugins array. Builds may also reference any public GitHub repository URL (https://github.com/owner/repo) as a plugin; those are not enumerated here.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds valuable behavioral context beyond annotations: the catalog is scoped to name-referenced plugins only, and URL-referenced plugins are intentionally absent. This sets accurate expectations about the result set.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences deliver the core purpose and the key exclusion without any filler. The main scoping statement comes first, and the GitHub URL exclusion is a necessary second sentence. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless list tool with rich annotations, the description is complete: it states what the catalog contains, how plugins are referenced, and what is not included. There is no output schema, but the return concept—a list of pluginnames—is simple enough that no further detail is needed.
Complex tools with many parameters or behaviors need more documentation. 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 schema coverage is 100%, so there are no parameter semantics to explain. The description correctly focuses on result scope rather than arguments. This is the appropriate 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 action and resource: listing plugins that can be referenced by name in a build's plugins array. It also differentiates itself from the broader category by explicitly noting that public GitHub repository URL plugins are not enumerated, making its scope clear relative to potential alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: use this tool when you need plugins that can be referenced by name in a build. It also provides an explicit exclusion—GitHub repository URL plugins are not included—which helps an agent avoid misusing it. It does not name a specific sibling tool as an alternative, but the usage boundary is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listPulseDashboardConnectionsList Pulse Dashboard ConnectionsARead-onlyIdempotentInspect
List the connections (data sources) attached to a Duvo Pulse dashboard (requires edit access).
| Name | Required | Description | Default |
|---|---|---|---|
| artifactId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a read-only, idempotent, non-destructive operation. The description adds an important behavioral detail beyond the annotations: it requires edit access to the dashboard. It does not describe return format or pagination, but for a simple read-only list operation the annotations carry the safety profile and the access requirement adds meaningful context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single focused sentence. Every element earns its place: the resource, the scope ('attached to a dashboard'), the clarification that connections are data sources, and the edit-access requirement. No filler or 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 one-parameter, read-only tool with clarifying annotations, the description is largely complete: it states the purpose, scope, and access requirement. The lack of an output schema means the return value is not formally documented, but the likely result—a list of connections/data sources—is strongly implied by the tool name and description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description must compensate. The phrase 'attached to a Duvo Pulse dashboard' implicitly identifies artifactId as the dashboard ID, and the parameter name plus format constraint help further. However, the description never explicitly maps artifactId to the dashboard, so the semantic link is inferred rather than stated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('connections (data sources) attached to a Duvo Pulse dashboard'), clearly clarifying that 'connections' means data sources. This also distinguishes it from broader tools like listConnections and from other dashboard-specific listers such as listPulseDashboards or listPulseDashboardVersions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 useful context by noting that listing requires edit access, which sets an implicit prerequisite. However, it does not explicitly state when to prefer this tool over alternatives such as the generic listConnections or the related getPulseDashboard, leaving the usage guidance mostly implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listPulseDashboardMessagesList Pulse Dashboard MessagesARead-onlyIdempotentInspect
List the chat transcript of a Duvo Pulse dashboard's live version (requires edit access). Returns the most recent page by default, oldest first within the page; pass before (a message id from a previous page) to walk back through older messages. Messages from other version branches are not included.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of messages to return (1-500, default 50). | |
| before | No | Message id cursor: return the page of messages immediately older than this message. Omit for the most recent page. | |
| artifactId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so safety is covered. The description adds substantial behavioral context beyond that: pagination direction ('oldest first within the page'), default page behavior, cursor semantics for 'before', the edit-access prerequisite, and exclusion of other version branches. This is rich, useful behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler. Key facts are front-loaded: purpose, permission requirement, then pagination and scope exclusions. 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 read tool with annotations covering safety, the description covers purpose, access, ordering, pagination, and branch filtering. There is no output schema, so a bit more about return shape would help, and the artifactId parameter is never explained. These are minor gaps given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds little beyond the schema: it restates the 'before' cursor concept and mentions the live version, but it does not explain the required artifactId parameter, which has no schema description. With schema coverage at 67% and the missing param being the only required one, the description should have compensated but did 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 uses a specific verb and resource: 'List the chat transcript of a Duvo Pulse dashboard's live version'. It also clarifies scope by stating that messages from other version branches are not included, which distinguishes it from related version and dashboard tools. The tool is clearly differentiated from siblings like sendPulseDashboardMessage and getPulseDashboard.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 the tool: to read the live version's chat transcript, and it notes the edit-access requirement. It also explains pagination behavior, which is a usage condition. However, it does not explicitly name alternative tools or state when to use them instead, so it stops short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listPulseDashboardsList Pulse DashboardsARead-onlyIdempotentInspect
List your Duvo Pulse dashboards (live, agent-generated visualizations of your Duvo data), most recently updated first.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of results per page (1-100, default 20) | |
| scope | No | Which dashboards to return: 'created' (yours, the default), 'team' (published to your whole team by a teammate), or 'shared' (shared with you individually by a teammate). | created |
| offset | No | Number of results to skip |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, non-destructive, idempotent behavior, so the bar for additional disclosure is lower. The description adds the 'most recently updated first' ordering and clarifies the objects are live agent-generated visualizations, but it does not mention pagination behavior, what each returned dashboard item contains, or any other operational nuance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence states the action, the resource, a clarifying definition, and the sort order with no filler. Every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list operation with zero required parameters and fully documented schema fields, the description is largely sufficient. It does not describe the shape of the returned dashboard objects, and there is no output schema to compensate, but the core invocation context is clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already explains limit, scope, and offset with types, defaults, bounds, and per-parameter descriptions. The tool description adds no parameter-specific meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: 'List your Duvo Pulse dashboards', and adds a parenthetical definition ('live, agent-generated visualizations of your Duvo data') that separates dashboards from related sibling resources such as listPulseDashboardConnections, listPulseDashboardMessages, and listPulseDashboardVersions. The ordering detail 'most recently updated first' further pins down the exact 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 intended use is implied: call this when you need to enumerate the caller's Pulse dashboards, and the default scope ('created') aligns with 'your'. However, there is no explicit guidance about when to prefer getPulseDashboard, createPulseDashboard, or the team/shared scope variants, so an agent is left to infer the routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listPulseDashboardVersionsList Pulse Dashboard VersionsARead-onlyIdempotentInspect
List the version history of a Duvo Pulse dashboard, newest first (requires edit access). Use the version id with the restore and version-render endpoints.
| Name | Required | Description | Default |
|---|---|---|---|
| artifactId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so safety is covered. The description adds helpful behavioral context beyond annotations: the edit-access requirement, newest-first ordering, and downstream consumption of the version id.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The core action and ordering are front-loaded, and the second sentence provides practical downstream guidance without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter, read-only list operation with strong annotations, the description covers the resource, access requirements, ordering, and how the result should be used. 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 0%, so the description carries some burden, but with only a single required artifactId, the phrase 'of a Duvo Pulse dashboard' clarifies the parameter's role. It doesn't explicitly name or explain the parameter format, making this adequate but not exceptional.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'List the version history of a Duvo Pulse dashboard' with ordering 'newest first.' It also distinguishes itself from related Pulse tools by noting the version id is meant for the restore and version-render 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?
Gives clear usage context by noting that edit access is required and that the returned version id should be used with the restore and version-render endpoints. It doesn't explicitly enumerate when not to use this tool versus siblings, but 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.
listQueueAgentsList Queue AgentsARead-onlyIdempotentInspect
List agents bound to a queue as producers (agents that push cases into the queue) or consumers (agents triggered by cases in the queue).
| Name | Required | Description | Default |
|---|---|---|---|
| queue_id | Yes | The queue's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds useful domain context about producer/consumer semantics, but does not disclose behavioral details such as pagination, ordering, or permission requirements. This is acceptable given the annotations, 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, well-structured sentence front-loads the core action and resource, then uses parenthetical clarification for the two roles. No filler or redundance; every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list operation with one required, well-documented parameter and annotations covering idempotency and non-destructiveness, the description is complete. An agent has enough information to invoke it correctly without needing an output schema or additional behavioral notes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully documents queue_id with format, pattern, and a clear description ('The queue's unique identifier'), so schema coverage is 100%. The description reinforces that the queue is the binding context but does not add parameter-level meaning beyond the schema, matching the baseline for full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'List agents bound to a queue'. It also clarifies two distinct roles — producers (push cases into the queue) and consumers (triggered by cases in the queue) — which distinguishes this from generic agent-listing tools like listAgents or listQueues.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 clear it is about queue-agent bindings rather than all agents or all queues, giving an agent enough context to select it over generic sibling tools. It does not explicitly name alternatives or state when not to use it, so it stops short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listQueueAggregationsList Queue AggregationsBRead-onlyIdempotentInspect
List a queue's aggregation definitions.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| queue_id | Yes | The queue's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and non-destructive behavior, and the description adds that the result is the queue's 'aggregation definitions' rather than computed results. It does not disclose pagination behavior, ordering, or the response when a queue has no aggregations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler or repetition. Every word contributes to identifying the verb and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple and annotations cover its safety profile, so the core one-liner is close to adequate. However, with no output schema, it would be stronger with a note about pagination and a distinction from result/evaluate/refresh aggregation siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33%; queue_id is documented, but limit and offset are not described in the schema or the tool description. The description adds no meaning for the pagination parameters, which is a notable gap at this coverage level.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('List') and a scoped resource ('a queue's aggregation definitions'), making the operation identifiable. It is distinguishable from siblings like getQueueAggregationResult or refreshQueueAggregation by the word 'definitions', though it does not explicitly name those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided for when to use this tool versus alternatives such as getQueueAggregationResult, evaluateQueueAggregation, or createQueueAggregation. The only usage signal is the verb 'List', leaving the agent to infer context from sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listQueueLabelsList Queue LabelsARead-onlyIdempotentInspect
List every label defined on a queue along with the count of cases each label is assigned to.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of labels per page (1-1000, default 1000). | |
| offset | No | Zero-based offset for pagination. | |
| queue_id | Yes | The queue's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds the result shape (label and case count) but does not disclose pagination behavior, ordering, or whether counts include only active cases. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, focused sentence that states scope, resource, and returned information without any filler. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with one required parameter and three documented parameters, the description is adequately complete. It explains the list scope and the per-item count. It could mention pagination explicitly, but the limit/offset parameters already signal this.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented in the input schema with type and meaning. The description does not add parameter-level detail, but the schema carries the burden, 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 action ('List'), a clear resource ('every label defined on a queue'), and a distinctive result ('count of cases each label is assigned to'). This clearly distinguishes it from sibling tools like listCaseLabels or listClarityProcessLabels by scoping labels to a queue with case counts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any explicit guidance on when to use this tool versus alternatives such as listCaseLabels. It implies queue-level label enumeration through the queue_id parameter, but there is no stated exclusion, prerequisite, or comparison to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listQueuesList QueuesBRead-onlyIdempotentInspect
List queues for your team.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of queues per page (1-250, default 250) | |
| offset | No | Number of queues to skip | |
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| automation_id | No | Only return queues belonging to this automation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as read-only, idempotent, and non-destructive, so the safety profile is covered. The description adds the team-scoping context, but it does not disclose pagination behavior, response shape, or any additional behavioral traits beyond what annotations already 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?
A single, front-loaded sentence conveys the tool's purpose without unnecessary words. For such a simple listing operation, this is appropriately concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity, rich parameter descriptions, and annotations covering safety, the description is largely sufficient. It could be slightly stronger by mentioning pagination or return shape, but 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 description coverage is 100%, with each parameter (limit, offset, team_id, automation_id) clearly documented. The description itself adds no parameter-level meaning, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('List') and resource ('queues'), with a team scope. It does not explicitly differentiate itself from sibling tools like getQueue, listQueueAgents, or listQueueLabels, but the primary purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives. It does not mention that this is for paginated/bulk queue listing, nor does it distinguish from getQueue or other queue-related list tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listRevisionIntegrationConnectionsList Revision Integration ConnectionsARead-onlyIdempotentInspect
List the connections you have pinned to this build's integration slot. Multi-pin is supported: you can pin multiple connections to the same slot.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | Agent ID | |
| build_id | Yes | Build ID | |
| integration_id | Yes | Integration ID (catalog integration ID or slot ID from the list response) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent, and non-destructive behavior. The description adds a useful behavioral detail beyond annotations: multi-pin is supported, so multiple connections may appear for the same slot. It does not cover return format or pagination, but for a simple read-only list this is a reasonable level of 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?
Two short sentences with no filler; the primary action and target are front-loaded. The second sentence adds only the non-obvious multi-pin behavior. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list operation, the description, schema, and annotations give an agent enough to call it correctly. It does not describe the return shape, but no output schema exists and the purpose makes the response type predictable. Slight ambiguity around what exactly an 'integration slot' is remains, but the schema's integration_id note mitigates it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all three parameters with descriptions, including the note that integration_id can be a slot ID. The description itself adds no parameter-level meaning. With full schema coverage, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb and resource: it lists connections pinned to a build's integration slot, not all connections. The 'pinned' and 'slot' wording distinguishes it from broader tools like listConnections and listRevisionIntegrations. The multi-pin note further clarifies the scope of what is being listed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case – inspecting pinned connections for a build's integration slot – but does not explicitly say when to prefer it over alternatives like listRevisionIntegrations or listConnections. It provides no exclusions or prerequisites. The context is inferable, but explicit routing guidance is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listRevisionIntegrationQueuesList Revision Integration QueuesARead-onlyIdempotentInspect
List the queues linked to this build's case-queue integration slot. Only meaningful for case-queue-producer and case-queue-consumer integrations.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | Agent ID | |
| build_id | Yes | Build ID | |
| integration_id | Yes | Integration ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety and mutation profile is covered. The description adds an applicability qualifier but does not disclose return shape, pagination, or what 'linked queues' means. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences: the first states the action and resource, the second adds a necessary scope qualifier. There is no filler, repetition of schema details, or unnecessary domain 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 simple read-only list operation with fully schema-covered UUID parameters and safety annotations, the description supplies the essential selection context. The only minor gap is that it assumes familiarity with the 'case-queue integration slot' concept and does not describe the response shape, but no output schema exists and the operation is straightforward.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters are fully described in the schema with UUID formats and 'Agent ID', 'Build ID', and 'Integration ID' labels. The description adds domain context about case-queue integrations but does not meaningfully elaborate on the individual parameters beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and identifies a precise resource: queues linked to a build's case-queue integration slot. It also narrows applicability to case-queue-producer and case-queue-consumer integrations. It does not explicitly contrast itself with siblings like listRevisionIntegrationConnections or listRevisionIntegrations, so it falls just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Only meaningful for case-queue-producer and case-queue-consumer integrations' provides clear context for when the tool applies and implicitly warns against using it for other integration types. It does not name specific alternative tools or give an explicit 'when not to use' beyond that applicability condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listRevisionIntegrationsList Revision IntegrationsBRead-onlyIdempotentInspect
List integrations attached to an agent revision.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | Agent ID | |
| build_id | Yes | Build ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds only the scope 'attached to an agent revision,' which is useful but not rich behavioral context such as ordering, pagination, or return shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that is front-loaded and free of fluff. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list operation with two clearly-specified UUID parameters, the description is largely complete. However, with no output schema and no mention of what fields or entities the returned integrations contain, there is a minor gap, and sibling confusion is not addressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both agent_id and build_id are documented in the schema with format and pattern constraints. The description adds no additional parameter meaning beyond what the schema already provides, which matches 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 states a specific verb and resource: list integrations attached to an agent revision. It is clear and distinct from the generic listIntegrations sibling, but it does not explicitly differentiate itself from closely related siblings like listRevisionIntegrationConnections or listRevisionIntegrationQueues.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternative integration-related list tools. An agent might confuse it with listIntegrations, listRevisionIntegrationConnections, or listRevisionIntegrationQueues without additional context about what distinguishes 'integrations' from these related resources.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listRevisionLoginsList Revision LoginsARead-onlyIdempotentInspect
List logins attached to a specific revision (build) of an assignment. Returns metadata only — passwords and OTP secrets are never exposed.
| Name | Required | Description | Default |
|---|---|---|---|
| agentId | Yes | ||
| buildId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only, idempotent, and non-destructive. The description adds valuable context beyond annotations by stating the return is metadata only and that passwords and OTP secrets are never exposed, which is critical for an agent handling sensitive login 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?
A single sentence with no filler. The core operation, scope, and important security constraint are front-loaded and concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with strong annotations, the description covers the essential operation and safety expectations. It lacks detail on the exact fields returned or pagination, but this is minor given the tool's simplicity and the secrecy guarantee.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the burden of explaining parameters. It clarifies that 'build' means a revision and ties the tool to an assignment, which helps infer that agentId identifies the assignment and buildId identifies the revision. However, it never explicitly names or maps the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (List), resource (logins attached to a specific revision/build of an assignment), and scope. It is easy to distinguish from sibling tools like attachRevisionLogin, detachRevisionLogin, and listRevisionSecrets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 by defining what the tool lists, but it does not explicitly state when to use this tool versus alternatives like listRevisionSecrets or listRevisionIntegrations. No exclusions or routing guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listRevisionSecretsList Revision SecretsARead-onlyIdempotentInspect
List env-var secrets attached to a specific revision (build) of an assignment. Returns metadata and env-var keys only — secret values are never exposed.
| Name | Required | Description | Default |
|---|---|---|---|
| agentId | Yes | ||
| buildId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds meaningful behavioral context by stating that secret values are never exposed and that only metadata and env-var keys are returned — privacy-relevant behavior not inferable from the annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The action and target are front-loaded, and the return-behavior caveat about secret values is included in a compact, high-value clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list-only tool with two required parameters and no output schema, the description gives a clear scope and a basic return contract: metadata and env-var keys. It could be more complete by listing what metadata is included, but it is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It maps buildId to 'revision (build)' and agentId to 'assignment', which gives useful semantic context. However, it does not explicitly name which parameter is which, or explain how to obtain these IDs, leaving some semantic work undone.
Input schemas describe structure but not intent. Descriptions should explain 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 ('env-var secrets attached to a specific revision (build) of an assignment'). It clearly differentiates from siblings like attachRevisionSecret, detachRevisionSecret, and listSecrets by targeting revision-scoped secrets, and adds that only metadata and keys are returned.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when you need the env-var secret keys and metadata for a particular revision/build. However, it does not explicitly mention alternatives, such as listSecrets for org-level secrets or getSecret for retrieving a secret value, so the agent is left to infer the intended context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listRunMessagesList Run MessagesARead-onlyIdempotentInspect
Get paginated messages for an agent run. Messages are returned in chronological order.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of messages per page (1-50, default 20) | |
| offset | No | Number of messages to skip | |
| run_id | Yes | The run's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds useful behavioral details about pagination and chronological ordering, but it does not disclose response shape or behavior for invalid or missing run IDs. No contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. It front-loads the core purpose and adds ordering behavior in the second sentence, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, read-only listing tool with fully documented parameters and strong annotations, the description is nearly complete. It could be more complete by distinguishing itself from listCaseRunRecentMessages or noting the absence of a response schema, but those are minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for all three parameters, including limit, offset, and run_id. The description does not add any parameter-specific meaning beyond what the schema already provides, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (get), resource (messages), and scope (an agent run), and adds that results are paginated and chronological. It does not explicitly differentiate from sibling tools like listCaseRunRecentMessages, so it stops short of a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for retrieving messages belonging to a specific run, which provides basic usage context. However, it offers no explicit guidance on when to prefer this over related tools such as listCaseRunRecentMessages or listRuns, and no when-not-to-use information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listRunsList RunsARead-onlyIdempotentInspect
List runs for the current team. Supports filtering by agent, user, queue, status, etc. Messages, evaluation data, and queue metadata are included where available. Set count_only=true to skip Run row selection and enrichment. The normal response shape is returned with data: [] and the matching total.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of runs per page (1-100, default 20) | |
| since | No | Return runs completed at or after this ISO-8601 timestamp. Runs that have not completed are excluded. | |
| until | No | Return runs completed before this ISO-8601 timestamp. The upper bound is exclusive. Runs that have not completed are excluded. | |
| offset | No | Number of runs to skip | |
| search | No | Full-text search across run titles and case titles | |
| source | No | Filter to runs created from this source (e.g. api, schedule) | |
| status | No | Filter to runs with this status | |
| sort_by | No | Field to sort by (default created_at) | created_at |
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| user_id | No | Filter to runs owned by this user; non-superadmin callers are scoped to themselves regardless of this value | |
| agent_id | No | Filter to runs for this agent | |
| digest_id | No | ||
| count_only | No | Skip row selection and enrichment. The normal list response shape is returned with an empty row array and the matching total. | false |
| has_issues | No | If true, only return runs that have evaluation issues | |
| sort_order | No | Sort direction (default desc) | desc |
| automation_id | No | Filter to runs whose agent belongs to this automation | |
| case_queue_id | No | Filter to runs associated with this queue | |
| issue_severity | No | If set, only return runs whose latest successful evaluation has at least one failing rubric with this severity (critical | medium | low). Implies has_issues; legacy evaluations without severity companion fields do not match this filter. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds specific behavioral details beyond the annotations: it explains that runs for the current team are returned, that filters are supported, and that messages, evaluation data, and queue metadata are included where available. It also describes the count_only behavior, which alters the response shape. This provides good transparency, though it does not cover every edge case.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured. It states the primary action, lists supported filters, mentions the included data, and explains the count_only behavior in a clear, direct manner. There is no unnecessary verbosity 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?
Given that there is no output schema, the description provides enough context about the response shape: it mentions the normal response with data: [] and the matching total, and notes that messages, evaluation data, and queue metadata are included. This is sufficient for a list operation, though it does not enumerate every field of each run object.
Complex tools with many parameters or behaviors need more documentation. 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 high description coverage (94%), and the parameter descriptions within the schema are detailed. The tool description does not add meaningful new information about parameters beyond what the schema already documents. Since the schema covers most parameters thoroughly, the description's contribution to parameter semantics is minimal, matching 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 purpose: 'List runs for the current team.' It specifies the resource (runs) and the action (list), and notes that it supports filters and includes additional data like messages and evaluation info. This is distinct from other list tools 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 usage for listing runs but does not explicitly distinguish it from alternative tools like getRun or listCaseRuns. It mentions the count_only option but does not provide guidance on when to choose this tool over others. The usage is inferable but not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listSandboxFilesList Sandbox FilesBRead-onlyIdempotentInspect
List files in a sandbox directory.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Directory to list files from (defaults to /workspace) | /workspace |
| sandbox_id | Yes | The sandbox's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered elsewhere. The description adds no behavioral detail beyond the title, such as whether the listing is recursive, whether hidden files are included, or what the response contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler: it names the verb and the resource immediately. It is as concise as a simple list operation needs to be, even though other dimensions lack depth.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with complete parameter documentation and safety annotations, the description is nearly sufficient: an agent knows it needs a sandbox_id and can optionally pass a path. The absence of an output schema and the close sibling listFiles leave minor ambiguity, but the core call is fully determined by the schema and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with sandbox_id documented as the sandbox's unique identifier and path documented as the directory to list with a default of /workspace. The description's phrase 'sandbox directory' only restates that context and adds no new parameter meaning, so the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action ('List') and a specific resource ('files in a sandbox directory'), so an agent can understand the basic function. However, it does not explicitly distinguish this tool from the sibling listFiles, which likely has overlapping behavior, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use listSandboxFiles versus listFiles, getFileContent, or uploadSandboxFile. The only hint is the word 'sandbox', which implies the tool is for sandbox-scoped file listing, but the intended selection criteria are not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listSecretsList SecretsARead-onlyIdempotentInspect
List env-var secrets visible to the caller — team-shared (user_id IS NULL) plus the caller's own personal entries. Returns metadata and env-var keys only; secret values are never exposed.
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only, idempotent, and non-destructive. The description adds valuable behavioral context beyond that: the exact visibility scope (team-shared with user_id IS NULL plus the caller's own entries) and the security-relevant guarantee that secret values are never returned. 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 focused sentences: the action and scope come first, followed by the key return-value constraint. There is no filler, no repetition of schema details, and no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-optional-param, read-only list tool with strong schema coverage and annotations, the description adequately covers what is returned, what is excluded, and who can see what. It stops short of listing exact metadata fields or pagination behavior, but nothing essential for selecting and invoking the tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single optional team_id parameter is fully described in the schema, including fallback behavior for API keys and the requirement for OAuth callers to pass the target team. The description itself adds no additional parameter-level meaning, so the schema-covered baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List env-var secrets') with a precise scope: team-shared entries plus the caller's own personal entries. It also distinguishes itself from value-returning secret tools by explicitly noting that secret values are never exposed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an implicit usage context: use this to enumerate visible secrets and obtain metadata/keys only, not values. However, it does not explicitly name alternatives like getSecret or state when to prefer them, so alternative routing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listSkillAssignmentsList Skill AssignmentsARead-onlyIdempotentInspect
List the agents in the current team whose live build references the given skill. Used to warn users that editing a skill will affect every agent that uses it.
| Name | Required | Description | Default |
|---|---|---|---|
| skill_id | Yes | Skill ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds valuable context beyond these: the scope is the 'current team' (complementing openWorldHint=false by defining the closed-world boundary), and only 'live build' references count — an important nuance distinguishing current usage from draft or historical revisions.
Agents need to know what a tool does to the 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 core function is front-loaded in the first sentence, and the second sentence earns its place by explaining the tool's purpose in an agent's decision workflow. Every word contributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with comprehensive annotations and 100% schema coverage, the description is nearly complete. It specifies scope, the meaning of the result, and when to use it. The only minor gap is the return format, which is not documented since there is no output schema — but 'List the agents…' makes the return shape reasonably inferable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline of 3 applies — the schema already documents skill_id as a UUID. The description reinforces the semantic ('the given skill' maps to skill_id) but adds no format or syntax details beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), a specific resource ('agents in the current team'), and a precise qualifier ('whose live build references the given skill'). It defines what an 'assignment' means in this context, distinguishing it from sibling tools like listAgents, listTeamMembers, listSkillRevisions, and listSkills without needing their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence provides a clear use case: 'Used to warn users that editing a skill will affect every agent that uses it.' This tells an agent when to call the tool (before editing/deleting a skill to assess impact). It doesn't explicitly name alternatives or exclusions, but the context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listSkillFilesList Skill FilesARead-onlyIdempotentInspect
List all files in a skill.
| Name | Required | Description | Default |
|---|---|---|---|
| skill_id | Yes | Skill ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds that the result is the complete file set ('all files'), but does not disclose return shape, whether directories are traversed, or error behavior, which is a moderate gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single six-word sentence with no repetition or filler. Every word carries meaning and the core action is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only list operation with rich annotations, the description is mostly sufficient. However, with no output schema and a sibling named listSkillRevisionFiles, it would be stronger if it clarified whether it returns the current skill's files, metadata fields, or nesting details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters and already documents skill_id as a UUID. The description adds no parameter-level meaning, so it stays at the baseline for fully covered schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action and object: 'List all files in a skill.' It is unambiguous about the resource being listed, but it does not differentiate this tool from nearby siblings like listSkillRevisionFiles or listFiles, so it falls short of full separation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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: use this when you need the file set for a skill. It does not explicitly state when to prefer it over listSkillRevisionFiles or how it differs from listFiles, so the guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listSkillRevisionFilesList Skill Revision FilesARead-onlyIdempotentInspect
List the files in a skill revision, one page at a time. When has_more is true, pass next_cursor back as cursor to fetch the next page.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of files to return per page (1-1000, default 100) | |
| cursor | No | Opaque continuation token from a previous response's `next_cursor`. Omit for the first page. | |
| skill_revision_id | Yes | Skill revision ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the operation as read-only, idempotent, and non-destructive, lowering the burden on the description. The description adds meaningful behavioral context about the pagination contract, explaining how to use `has_more` and `next_cursor` to continue fetching pages.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The core operation is stated first, and the pagination detail that is essential to correct invocation is placed right after.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only paginated list tool, the description covers the essential return-related behavior by naming `has_more` and `next_cursor`. It doesn't describe the file object shape, but the lack of an output schema is partially mitigated by the simplicity of the operation and the clear resource being listed.
Complex tools with many parameters or behaviors need more documentation. 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, documenting all three parameters with descriptions, defaults, and constraints. The description mostly reiterates the cursor behavior already captured in the schema ('Opaque continuation token from a previous response's `next_cursor`'), so it adds little new semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), a specific resource ('files in a skill revision'), and adds pagination context ('one page at a time'). This clearly distinguishes it from siblings like listSkillRevisions (lists revisions) and listSkillFiles (lists files at the skill level).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly conveys when to use this tool: when you need the files belonging to a specific skill revision. It doesn't explicitly name alternatives or exclusions, but the resource scoping ('in a skill revision') provides clear context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listSkillRevisionsList Skill RevisionsARead-onlyIdempotentInspect
List a skill's version history. Each revision is a snapshot of the skill's files; at most one is active (live) at a time, plus at most one open draft.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of revisions per page (1-100, default 20) | |
| offset | No | Number of revisions to skip | |
| skill_id | Yes | Skill ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, so the safety profile is covered. The description adds valuable non-obvious context about revision semantics: each revision is a file snapshot, and there is at most one active/live revision and one open draft. This goes meaningfully 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?
The description is two sentences with no wasted words. The primary action is front-loaded, and the second sentence earns its place by explaining the revision/live/draft model that is essential to understanding the result.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with strong annotations and complete parameter documentation, the description conveys the essential output concept: a version history of file snapshots with at most one live revision and one open draft. It leaves minor details implicit, such as sort order and whether the draft appears in the paginated list, but these are not significant enough to make the tool hard 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?
Schema description coverage is 100%, with skill_id, limit, and offset all documented in the schema. The description does not add parameter-level detail, but it does not need to because the schema fully explains the parameters. 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 verb ('List') and the resource ('a skill's version history'), then explains what a revision is: a snapshot of the skill's files with at most one live revision and one open draft. This uniquely distinguishes it from sibling tools like listSkillRevisionFiles, which list files inside a revision, and getRevision, which retrieves a specific 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 explicit when-to-use or when-not-to-use guidance is provided. There is no mention of alternatives such as getRevision or listSkillRevisionFiles, nor any conditions under which this tool should be chosen over them. The domain context implies a listing use case, but an agent must infer the routing decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listSkillsList SkillsARead-onlyIdempotentInspect
List all skills for the current team, including system skills.
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds the 'current team' scope and inclusion of system skills, which is useful context beyond annotations, but it does not address output format or pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, focused sentence that front-loads the action and scope. Every word earns its place; there is no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-optional-parameter, read-only list tool with complete schema documentation and safety annotations, this description is sufficient. It tells the agent what will be listed and the special inclusion of system skills, and no output schema is needed for a simple list operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: the team_id parameter is already thoroughly documented with fallback and restriction behavior. The tool description adds no extra parameter semantics beyond mentioning 'current team,' 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?
Description uses a specific verb ('List') and resource ('all skills for the current team'), and the phrase 'including system skills' sharpens scope against sibling tools such as listSystemSkills. An agent can tell what this tool returns without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to prefer this tool over alternatives; sibling listSystemSkills exists and is not referenced. The description only implies a generic listing use case, and the team_id parameter description covers team selection rather than tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listSystemSkillsList System SkillsARead-onlyIdempotentInspect
List all system skills (skills available to all teams).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose readOnlyHint, idempotentHint, and destructiveHint, which cover the safety profile. The description adds the scoping context that the tool returns system-wide skills consistent with openWorldHint=false, but it discloses no additional behavioral traits such as pagination, ordering, or return shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the verb and resource, followed by a compact parenthetical that adds disambiguating scope. Every word earns its place with negligible waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameter-less, read-only list operation, the description plus annotations are nearly sufficient. The only gap is unspecified return properties or pagination, but the trivial complexity makes this a minor omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is empty with zero parameters, so there is nothing for the description to clarify. Baseline 4 applies for parameter-less tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('list') and resource ('system skills'), and the parenthetical defines system skills as 'skills available to all teams,' which disambiguates it from close siblings such as listSkills, listSkillAssignments, and listSkillRevisions. An agent can distinguish this tool 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 parenthetical gives implicit usage context — use this when you want skills available to all teams. However, no alternative tool is named and no explicit when-not-to-use guidance is given, so routing among the many skill-related siblings is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listTeamInvitesList Team InvitesARead-onlyIdempotentInspect
List a team's pending invitations — everyone invited who has not yet accepted or declined. Pass processId to list the pending invitations for a single Clarity process instead.
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| processId | No | List the pending invitations for this Clarity process instead of the team's own invitations. Requires the process creator or a team admin. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds useful scoping semantics (pending-only, processId override), but does not disclose pagination, response shape, or permission nuances beyond what the schema already provides.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with the main action front-loaded and the alternative invocation clearly stated. Every word earns its place, with no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list operation with zero required parameters and rich parameter schemas, the description is mostly complete. It does not describe return fields or pagination, which would be useful given there is no output schema, but an agent has enough 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 description coverage is 100%, so both parameters are already well documented in the schema. The description adds a helpful 'instead' framing for processId but does not materially go beyond the schema's 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 clearly states the verb and resource: list a team's pending invitations, and defines 'pending' as not yet accepted or declined. It also distinguishes the processId-scoped variant. However, it does not explicitly differentiate this tool from sibling tools like listTeamMembers or getTeamInviteLink.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 usage context: list pending team invitations, or pass processId to list pending invitations for a single Clarity process. It does not explicitly state when not to use this tool or name alternative list tools, but the context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listTeamMembersList Team MembersARead-onlyIdempotentInspect
List members of a team. The authenticated session or API key must be scoped to the requested team.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of members per page (1-100, default 50) | |
| offset | No | Number of members to skip | |
| search | No | Optional case-insensitive name or email search | |
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral context by requiring the authenticated session or API key to be scoped to the team, which is a real constraint beyond what annotations express. It does not describe return values or error behavior, but the annotations carry most of the safety burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence with no wasted words. It states the core action first and the auth precondition second, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity list operation, the description combined with the fully documented schema and safety annotations is sufficient for correct invocation. There is no output schema, but 'list members of a team' adequately signals that the result is a member list. 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 description coverage is 100%, and the schema itself already provides detailed parameter semantics, including the nuanced team_id guidance for API keys versus OAuth callers. The description only adds a general auth-scoping requirement and does not elaborate on limit, offset, or search beyond what the schema already documents. Baseline 3 is appropriate when the schema handles 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 a specific verb ('List') and resource ('members of a team'), making the tool's purpose immediately understandable. It is distinguishable from mutation siblings like removeTeamMember and updateTeamMemberRole by being a read operation, but it does not explicitly name or contrast any 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 gives clear context: this tool lists team members. It also provides a practical precondition — the session or API key must be scoped to the requested team — which helps an agent decide whether the call can succeed. It does not mention alternative tools, but the operation is simple enough that no exclusions are necessary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
markAllNotificationsReadMark All Notifications ReadAIdempotentInspect
Mark all notifications as read for the authenticated user's current team. Returns the count of notifications that were updated. Requires the Notification Center feature; returns 404 when it is not enabled for the team.
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=false and idempotentHint=true, which the description does not contradict. The description adds value beyond annotations by disclosing the return value (count of updated notifications), the 404 failure mode when the feature is disabled, and the team-scoping constraint. No annotation 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 sentences with zero filler. The action is front-loaded, followed by the return value, then the feature prerequisite. Each sentence earns its place; the description is compact 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 single-optional-parameter tool with 100% schema coverage and safety annotations, the description covers action, scope, return value, and error condition. The only minor gap is a slight ambiguity about whether 'all notifications' means all of the user's notifications within the team or all team notifications, and it does not mention related read-state tools. Otherwise, nothing needed for a correct call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: the team_id parameter already carries a rich description (API key pinning, OAuth multi-team behavior, fallback and rejection rules). The tool description adds mild framing by referencing 'the authenticated user's current team,' but the schema does the heavy lifting for parameter semantics. 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 ('mark') and resource ('all notifications') with an explicit scope ('the authenticated user's current team'). The word 'all' inherently distinguishes it from siblings markNotificationRead and markNotificationBatchRead, and 'mark as read' distinguishes it from deleteAllNotifications/deleteReadNotifications. Purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear precondition ('Requires the Notification Center feature; returns 404 when not enabled') that tells an agent when the tool is available, and the scope ('current team') frames when it applies. However, it does not explicitly name alternatives or give when-not-to-use guidance (e.g., when a batch subset is preferred over all notifications). Usage context is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
markNotificationBatchReadMark Notification Batch ReadAIdempotentInspect
Mark every unread live member of a notification batch as read for the authenticated user. Pass types to narrow the mark-read to those member types, and severity (exact) or minSeverity (threshold, mutually exclusive with severity) to narrow it by urgency — e.g. the page's active filters; omit them to mark every live member. Narrowing matters when the batch card was rendered under a filter: the rows marked read should be the rows the card counted. Returns the count of members that were updated. Requires the Notification Center feature; returns 404 when it is not enabled for the team or the batch does not exist or belongs to another recipient/team.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The notification batch's unique identifier | |
| types | No | ||
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| severity | No | ||
| minSeverity | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a mutating, idempotent, non-destructive operation. The description adds meaningful behavior beyond that: it affects only 'unread live members,' explains that filters should mirror the page's active filters, states that it returns the count of updated members, and discloses the feature requirement plus 404 conditions. 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?
Four sentences, each earning its place: main action, filter semantics, the rationale for narrowing, and error/return behavior. The most important information is front-loaded, and there is no redundant repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description tells the agent the return value ('count of members that were updated') and the 404 failure modes (feature not enabled, batch not found, or wrong recipient/team). For a mutating batch operation with five parameters, this covers all critical information 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?
Schema description coverage is only 40% (only id and team_id have descriptions). The description compensates by explaining the purpose of `types` (narrow by member types), the exact-vs-threshold semantics of `severity` vs `minSeverity`, their mutual exclusivity, and the default behavior when omitted. This adds meaning well beyond the bare enum lists in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Mark every unread live member of a notification batch as read for the authenticated user.' It precisely defines the operation's scope ('unread live member', 'notification batch'), which clearly distinguishes it from siblings like markNotificationRead (single notification) and markAllNotificationsRead (all notifications), 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 gives clear parameter-level guidance: pass `types` to narrow by member type, use `severity` (exact) or `minSeverity` (threshold, mutually exclusive) to narrow by urgency, and omit them to mark every live member. It also explains when narrowing matters ('when the batch card was rendered under a filter'). However, it does not explicitly state when to choose this tool over the sibling markNotificationRead or markAllNotificationsRead, so the routing context is strong but alternatives aren't named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
markNotificationReadMark Notification ReadAIdempotentInspect
Mark a notification as read for the authenticated user. Idempotent — calling it again on an already-read notification still returns success. Requires the Notification Center feature; returns 404 when it is not enabled for the team.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The notification's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide idempotentHint=true, readOnlyHint=false, and destructiveHint=false. The description adds value by spelling out the idempotent behavior ('calling it again ... still returns success') and by disclosing the feature-dependency 404 condition, which is useful behavioral context 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?
Two sentences with no fluff. The core action is front-loaded, followed by the idempotency guarantee and the feature-enablement 404 note. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter mutation tool, the description covers the key behavior, feature dependency, and auth scope. The only minor gap is the behavior when the notification ID does not exist, but the description is otherwise complete enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully documents the only parameter, id, including type, format, pattern, and a description. The tool description adds no new meaning about the parameter, but with 100% schema coverage, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Mark a notification as read for the authenticated user.' The singular 'a notification' clearly distinguishes it from the sibling markAllNotificationsRead and markNotificationBatchRead tools, so an agent can tell them apart without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly establishes the scope: single notification, authenticated user. It implies this is the right tool when exactly one notification needs marking, and the sibling names communicate the batch/all alternatives. It does not explicitly exclude other tools, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
moveAgentMove AgentAInspect
Move an agent (and its connected workspace) to a different team. Pass dry_run=true to preview the closure without applying changes.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | When true, preview the closure and warnings without applying any changes. | |
| agent_id | Yes | The ID of the agent to move. | |
| target_team_id | Yes | The ID of the team to move the agent into. | |
| bypass_standalone_gate | No | When true, move the agent together with every connected queue, trigger, and handover peer instead of rejecting a non-standalone agent. Defaults to false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavior beyond annotations by revealing that the connected workspace is moved and that the operation involves a 'closure' that can be previewed with dry_run. Annotations already signal mutation through readOnlyHint=false, and the description enriches this with concrete side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no filler. The core action is front-loaded, and the dry-run guidance is placed second as a natural follow-up. 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 mutation tool with full schema coverage and annotations, the description gives enough context: what is moved, what to preview, and that the operation can be dry-run. It does not explain return values or deeper closure consequences, but the absence of an output schema and the presence of the bypass_standalone_gate parameter in the schema make this acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all four parameters. The description mentions dry_run=true but does not add meaning beyond the schema. Baseline 3 is appropriate because the structured data already carries the parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action ('Move'), a specific resource ('an agent and its connected workspace'), and the target ('to a different team'). This clearly differentiates it from siblings like moveAgentsToFolder or movePulseDashboard.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 operational context: moving an agent to a different team affects the connected workspace. It also provides a direct usage hint for dry_run=true. It does not explicitly enumerate alternatives or when-not-to-use, but the core use case is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
moveAgentsToFolderMove Agents To FolderAInspect
Move one or more agents (assignments) into a folder, or to the root level.
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| agent_ids | Yes | IDs of the agents (assignments) to move. Must be unique. | |
| folder_id | Yes | Destination folder ID. Pass null to move the agents to the root level. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal a non-read-only mutation that is not destructive or idempotent. The description adds the specific move behavior and the root-level option, but does not disclose side effects such as leaving the previous folder or permissions required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that states the action, target, and destination options with no filler. It is concise and immediately 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 straightforward move operation with fully self-describing parameters, the description plus schema provides enough to invoke correctly. It omits return-value details, but no output schema exists and the operation is simple enough that this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: each parameter has a meaningful description, including the null meaning of folder_id. The tool description adds no parameter-level details beyond what the schema already provides, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb (move), resource (agents/assignments), and destination (folder or root level). It is unambiguous, though it does not explicitly differentiate from the similarly named sibling moveAgent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied by the operation—use it when agents need to be placed into a folder or moved back to root—but no alternatives or when-not-to-use conditions are mentioned, despite relevant siblings like moveAgent and moveClarityProcessesToFolder.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
moveClarityProcessesToFolderMove Clarity Processes To FolderAInspect
Move processes into a folder (or back to Unfiled)
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| folderId | Yes | Destination folder ID, or null to move back to Unfiled. | |
| processIds | Yes | Clarity process IDs to move. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a write operation (readOnlyHint=false) and non-destructive (destructiveHint=false). The description adds the 'back to Unfiled' behavior, which is useful, but it does not disclose side effects such as the process being removed from its previous folder or behavior when some processIds are invalid. No annotation contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It conveys the primary operation and the key Unfiled exception in very few words, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple bulk-move operation with fully self-documenting parameters and no output schema, the description is complete enough. It states the action, the target, the special Unfiled case, and the schema covers the remaining invocation details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with detailed descriptions for processIds, folderId, and team_id, including the null-to-Unfiled behavior. The tool description adds no extra parameter meaning beyond what the schema already provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Move processes into a folder (or back to Unfiled)'. It clearly distinguishes this tool from sibling move tools like moveAgentsToFolder and movePulseDashboard by naming Clarity processes, and it adds the important edge case of moving back to Unfiled.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 well enough for a self-named operation, but it does not explicitly say when to prefer this over related tools such as updateClarityFolder or reorderClarityFolders, nor does it mention that folder IDs come from listClarityFolders. There are no exclusions or alternative routing hints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
movePulseDashboardMove Pulse DashboardAInspect
Move a Pulse dashboard from the team in the URL to another team, keeping only its latest revision (chat history and older revisions are deleted). The caller must be a Manager or above on both teams. Pass dryRun=true to preview which Connections reconnect vs drop without applying changes.
| Name | Required | Description | Default |
|---|---|---|---|
| dryRun | No | When true, only previews the move: reports which Connections would reconnect vs drop without changing anything. | |
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| artifactId | Yes | ||
| targetTeamId | Yes | ID of the destination team the dashboard moves to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states that older revisions and chat history are deleted, yet the annotation destructiveHint is false. This is a direct contradiction between the description and annotations, severely undermining behavioral transparency. The tool is destructive in effect, but the annotation claims otherwise.
Agents need to know what a tool does to the 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, using two sentences to convey the action, key side effects, permissions, and optional dryRun. It is well-structured with no fluff, making it easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential aspects: action, source/destination, permissions, side effects, and preview option. There is no output schema, but the absence is not a major gap since the operation's result (success/error) is typical. The description does not specify return details, but the tool's behavior is sufficiently explained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Three of four parameters have detailed descriptions: dryRun explains preview behavior, team_id clarifies API key pinning, and targetTeamId indicates the destination. artifactId lacks a description but is clearly the dashboard UUID from context. Overall the descriptions add meaningful semantics beyond bare parameter names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 'Move' and resource 'Pulse dashboard', specifies the source team (from the URL) and destination team (targetTeamId), and elaborates on the effect (keeping only latest revision, deleting chat history and older revisions). It also mentions permissions and dryRun preview, making the intent unambiguous and distinguishing it from related tools like duplicate or publish.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides preconditions (Manager or above on both teams) and the dryRun option, giving clear guidance on when and how to use the tool. However, it does not explicitly contrast with alternative tools like moveAgent or duplicatePulseDashboard, so a subtle 'use this when X' is missing, but the purpose is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
organizeClarityProcessLandscapeOrganize Clarity Process LandscapeAInspect
Start an asynchronous organization pass over the organization's unfiled processes, placing them into the Process Landscape where possible (organization admin+). Results appear progressively; started is false when there is nothing to organize.
| Name | Required | Description | Default |
|---|---|---|---|
| orgId | Yes | ||
| instructions | No | Deprecated: ignored. The organize pass takes no instructions. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal a mutating, non-idempotent operation, so the description adds valuable context by disclosing async execution, progressive results, and the 'started is false when there is nothing to organize' edge case. It also surfaces the admin+ permission gate. No contradiction with annotations is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and scope, followed by the async and result behavior. There is no filler, no repetition of schema fields, and every clause contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating tool with no output schema, the description covers the core action, admin permission, async execution, progressive appearance of results, and the meaningful false-start condition. It could specify how to observe progress or handle concurrent passes, but the provided context is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema documents instructions as deprecated/ignored but leaves orgId with only format and pattern. The description indirectly clarifies orgId as the target organization by referring to the organization's unfiled processes, but it does not explicitly map either parameter or provide additional semantic detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action ('Start an asynchronous organization pass'), names the resource ('the organization's unfiled processes'), and states the destination ('placing them into the Process Landscape'). This clearly distinguishes it from sibling get/generate/propose landscape tools by framing it as an organizing operation rather than a read or generation operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context: use this when you want to organize unfiled processes into the Process Landscape, and it flags the admin+ permission requirement. It does not explicitly name alternative tools or state when not to use it, so exclusion guidance is left somewhat implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinRevisionIntegrationConnectionPin Revision Integration ConnectionAInspect
Pin one of your connections (from GET /v2/teams/:team_id/connections) to this build's integration slot. Multi-pin is supported: a single user can pin multiple connections to the same slot.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | Agent ID | |
| build_id | Yes | Build ID | |
| connection_id | Yes | ID of one of your connections (from GET /v2/teams/:team_id/connections) to pin to this slot | |
| integration_id | Yes | Integration ID (catalog integration ID or slot ID from the list response) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds a valuable behavioral detail not present in the annotations: multi-pin is supported, meaning a single user can pin multiple connections to the same slot. This helps set expectations about non-replacement behavior. The annotations already signal a write operation and non-destructive behavior, and the description is consistent with those signals.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. It front-loads the core action, then adds the most important behavioral nuance, multi-pin support. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple pin operation with four required parameters, the description plus schema provide enough context to invoke the tool correctly. It explains the source of connections, the target slot, and the key behavioral twist. The lack of an output schema is not a significant gap here, though it does not describe what happens to existing pins beyond implying coexistence through multi-pin support.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters. The description reinforces where connection_id comes from and what an integration slot is, but it does not add new semantic detail beyond the schema. This is an adequate baseline case where structured information carries the weight.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 (pin), a specific resource (connection), and a clear target (build's integration slot), while also specifying the source of valid connections via the GET endpoint. This clearly distinguishes it from siblings like unpinRevisionIntegrationConnection and listRevisionIntegrationConnections. It adds meaningful detail beyond the title by explaining what is pinned and where.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 the tool: when pinning an existing connection to a build's integration slot, and it even tells the agent where to obtain valid connection IDs. It does not explicitly discuss alternatives or exclusion conditions, but the intended usage is unambiguous enough for an agent to select this tool correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
postprocessClaritySnapshotPostprocess Clarity SnapshotAInspect
Re-run postprocessing agents on an existing v2 clarity snapshot. Targets either the current-process snapshot or the automation proposal snapshot, identified by id in the body. Flips the process status to generating and returns 202 immediately; agents run asynchronously and flip the status back to review once they settle.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | The snapshot kind to post-process. | |
| process_id | Yes | The clarity process id | |
| current_process_id | No | Required when type is `current_process`. | |
| transformation_proposal_id | No | Required when type is `transformation_proposal`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by disclosing key behavioral traits: it flips the process status to `generating`, returns 202 immediately, and runs agents asynchronously before flipping the status back to `review`. This gives an agent a clear model of the side effects and async behavior without contradicting the readOnlyHint=false annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three focused sentences: the action is front-loaded, followed by the target scope, then the async behavior. There is no filler or redundant repetition of schema information. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core action, target selection, immediate 202 response, and asynchronous completion behavior. With no output schema, it omits return-value specifics but provides enough for an agent to understand the operation's flow. The exact conditional id mapping is left to the schema, which fully documents it, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds some semantic grouping by naming the snapshot kinds, but it uses 'automation proposal' where the schema enum says 'transformation_proposal,' and it vaguely refers to 'identified by id in the body' without mapping ids to types. The parameter details are essentially carried by the schema, not the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Re-run postprocessing agents on an existing v2 clarity snapshot.' It further narrows the target to either the current-process snapshot or the automation proposal snapshot. This clearly distinguishes it from sibling snapshot operations like generateClarityProcessSnapshot, promoteClarityProcessSnapshot, saveClarityProcessSnapshot, revertClarityProcessSnapshot, and stopClarityProcessSnapshot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 the use case: when you need to re-run postprocessing agents on an existing snapshot, and it identifies the two snapshot types it can target. However, it does not explicitly mention alternatives or provide 'when not to use' guidance, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
postRunMessagePost Run MessageAInspect
Post a message to an agent run. This will persist the message and resume the agent execution if the run is in a resumable state (waiting, completed, or interrupted).
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | The run's unique identifier | |
| message | Yes | The message content to send to the agent |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint false, idempotentHint false), the description discloses concrete behavioral consequences: the message is persisted and execution may resume. It also specifies the three resumable states, adding real context an agent needs to predict effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: the first states the primary action, the second states the side effect and its condition. The most decision-relevant information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with annotations already covering mutability, the description fully characterizes the tool's core behavior and conditional resume effect. It does not detail error handling or return value, but there is no output schema and the simplicity of the call makes that gap minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both run_id and message already have clear schema descriptions. The tool description does not add meaning beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete action—'Post a message to an agent run'—and distinguishes it from run lifecycle siblings like startRun and stopRun by focusing on message delivery. It also names the resume side effect, making the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit conditions for when the resume behavior applies ('if the run is in a resumable state (waiting, completed, or interrupted)'), which tells an agent when the tool is meaningful. It does not explicitly name alternatives, but it provides enough context to route away from unrelated run tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
previewAgentCaseTriggerConflictsPreview Agent Case Trigger ConflictsARead-onlyIdempotentInspect
Preview which other agents would conflict with this agent's case trigger if it pointed at the given queue. Does not modify the trigger.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | The agent's unique identifier | |
| case_queue_id | Yes | The queue to check for conflicts against |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description reiterates 'Does not modify the trigger,' which is redundant but consistent. It adds the context of the hypothetical queue check but does not disclose return format or potential side effects beyond what annotations cover.
Agents need to know what a tool does to the 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 that front-load the primary purpose and immediately clarify non-modification. No wasted words; the description is tightly scoped and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only preview tool with two UUID parameters and no output schema, the description conveys the essential behavior and outcome (returns conflicting agents). It could mention the return format or any prerequisites (e.g., whether the agent must already have a trigger), but given the annotations and simplicity, it is largely 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% with both parameters having clear descriptions (e.g., 'The agent's unique identifier' and 'The queue to check for conflicts against'). The tool description adds no additional semantic meaning beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Preview') and resource ('agent case trigger conflicts') and clarifies the hypothetical condition ('if it pointed at the given queue'). It distinguishes from create/update/delete triggers by explicitly noting it does not modify the trigger, 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?
The description implies a planning use case ('Preview which other agents would conflict') but does not explicitly name alternatives or state when to use this vs. creating/updating a trigger. It says 'Does not modify the trigger' which hints at non-destructive intent, but lacks direct comparison to sibling tools like createAgentCaseTrigger.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
probeMcpServerProbe an MCP server for available toolsAInspect
Probe an MCP server URL and list the tools it exposes. Useful as a dry-run before creating a connection — verifies the URL is reachable, that authentication headers (if any) are correct, and surfaces the tool catalog. Performs no writes; sits alongside /v2/teams/:team_id/connections/oauth/mcp/check (which probes the same URL for OAuth support).
| Name | Required | Description | Default |
|---|---|---|---|
| headers | No | Optional HTTP headers for authentication (raw server_url mode only) | |
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| server_url | No | Raw MCP server URL to probe (for custom MCP servers) | |
| integration_slug | No | Catalog integration slug. The backend resolves the MCP server URL and dummy auth headers server-side — no server_url or headers needed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The claim 'Performs no writes' directly contradicts readOnlyHint=false in the annotations — the mirror image of the create_record calibration example. It also implies repeatable, side-effect-free behavior that sits uneasily with idempotentHint=false. The rest of the description (reachability check, auth verification, catalog surfacing) is genuinely useful, but the contradiction rule requires score 1.
Agents need to know what a tool does to the 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 with no filler: function, use case plus verifications, and sibling differentiation. The core action is front-loaded in sentence one and every subsequent 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 tool with two parameter modes, no output schema, and a vague return description ('tool catalog'), the definition is adequate but gappy: it doesn't say how to pick server_url+headers vs integration_slug, doesn't describe the response shape, and the no-writes claim conflicts with the annotations, leaving the safety profile ambiguous. The strong schema descriptions compensate partially but not fully.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with strong per-parameter text (especially team_id's API-key-vs-OAuth rule and integration_slug's server-side resolution), so the schema carries the load. The tool description adds only light context — headers as 'authentication headers' and the URL as the probe target — and never explains the two mutually exclusive invocation modes (server_url+headers vs integration_slug), which the agent must infer from the schema enum.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-resource pair — 'Probe an MCP server URL and list the tools it exposes' — stating the exact action and outcome. It also names the sibling checkMcpOAuth and the OAuth-support angle that distinguishes it, so an agent can separate the tools 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 an explicit trigger condition: 'Useful as a dry-run before creating a connection,' and spells out what it verifies (reachability, auth headers, tool catalog). It also names the alternative path — the OAuth check endpoint — and what that one probes for, providing clear when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
promoteClarityProcessSnapshotPromote Clarity Process SnapshotAInspect
Promote a draft or historic Clarity v2 snapshot to live for its kind.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Snapshot kind to list | |
| process_id | Yes | The clarity process id | |
| snapshot_id | Yes | Snapshot id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that this is a state-changing 'promote' operation, and annotations confirm it is not read-only, not idempotent, and not marked destructive. However, it does not describe side effects such as what happens to the current live snapshot or whether promotion can be undone, leaving those details to inference.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single 13-word sentence with no filler. The core action and target state are front-loaded, and every word contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple mutation with three required, fully described parameters and no output schema, the description captures the essential behavior and allowed source states. It is slightly incomplete in not specifying what happens to the previous live snapshot or what the response contains, but annotations and schema cover the safety profile and 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 three parameters are already fully documented in the input schema, so the description adds no additional parameter-level meaning. The baseline of 3 applies; notably, the schema's 'kind' description says 'Snapshot kind to list,' a likely copy-paste artifact that the tool description does not correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 precise state-transition: promote a 'draft or historic Clarity v2 snapshot' to 'live for its kind.' This clearly differentiates it from sibling snapshot tools like generate, save, list, revert, and stop, which create, persist, list, or reverse snapshots rather than changing their live status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 'draft or historic ... to live' gives a clear trigger condition: use this tool when a non-live snapshot of either enum kind should become the live one. It does not explicitly name alternatives or when-not-to-use conditions, but the context is sufficient for choosing it over related snapshot operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
promoteRevisionPromote RevisionAInspect
Promote a draft or historic revision to the live version. The live revision is the one used by triggers and new runs. Fails if the revision is already live, or if a draft revision still has an active builder run.
| Name | Required | Description | Default |
|---|---|---|---|
| build_id | Yes | The build's unique identifier | |
| revision_name | No | Optional display name to set on the promoted revision. | |
| revision_description | No | Optional description for the promoted revision. Pass null to clear an existing description. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already mark this as a non-read-only, non-idempotent, non-destructive action; the description adds meaningful behavior on top by disclosing two failure modes and the effect on triggers/new runs. It does not contradict the annotations, though it could have clarified what happens to the previous live revision.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: the first states the action, the second adds the consequence and failure conditions. There is no filler or redundancy, and the most important operational constraint is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a small mutation tool with no output schema, the description covers the action, its purpose, and key failure cases; optional parameters are fully documented in the schema. The only minor gaps are definitional context around what qualifies as a draft/historic revision and the exact relationship between build_id and the revision being promoted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% parameter description coverage, so the baseline is 3. The tool description adds no parameter-level detail beyond the schema, and it leaves the relationship between build_id and 'revision' implicit, but the schema's own property descriptions cover the three fields adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and object: 'Promote a draft or historic revision to the live version.' It also defines what 'live' means ('used by triggers and new runs'), making the tool's purpose unmistakable and distinct from read/update revision 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?
It gives clear when-to-use context: promotion is needed to make a revision live for triggers and new runs. It also provides when-not conditions by stating the call fails if the revision is already live or a draft still has an active builder run. It does not explicitly name sibling alternatives like promoteSkillRevision, 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.
promoteSkillRevisionPromote Skill RevisionAIdempotentInspect
Make a skill revision the active (live) one. The previously active revision becomes historic and can be re-activated later. Idempotent: promoting the already-active revision succeeds rather than erroring, and still applies any revision_name / revision_description supplied in the body.
| Name | Required | Description | Default |
|---|---|---|---|
| revision_name | No | Optional display name to set on the promoted revision. | |
| skill_revision_id | Yes | Skill revision ID. | |
| revision_description | No | Optional description for the promoted revision. Pass null to clear an existing description. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation as mutating and idempotent, but the description adds meaningful behavior beyond them: the previously active revision becomes historic and can be re-activated, and idempotent promotion still applies revision_name/revision_description. This gives an agent a clear mental model of side effects and reversibility without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with the primary action first, then the state consequence, then the idempotent edge case. Every sentence earns its place and there is no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 3-parameter mutation with complete schema documentation and annotations covering idempotence and non-destructiveness, the description covers the important state transition, reversibility, and idempotent behavior. No output schema exists, and none is needed for correct invocation at this level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by explaining that revision_name and revision_description are applied even when promoting the already-active revision, which is a behavioral subtlety not obvious from the schema alone. It doesn't need to restate each parameter's schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Make a skill revision the active (live) one,' and clarifies the state transition (previously active becomes historic). It does not explicitly distinguish itself from the closely named sibling promoteRevision, so it stops shy of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to choose this tool over alternatives such as promoteRevision, updateSkillRevision, or createSkillRevision. There are no prerequisites, exclusions, or conditional use cases beyond the core action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proposeClarityLandscapeProcessPropose Clarity Landscape ProcessAInspect
Create a manual process in the organization's Process Landscape, either as an unassigned proposal or atomically assigned to an eligible team.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| orgId | Yes | ||
| teamId | No | ||
| parentId | No | ||
| description | No | One short paragraph (1-3 sentences) saying why this process belongs in the landscape. Use only what you saw in the captures. Say what the process is (don't just repeat the name), show proof it really happens, and name where you heard it - be as specific as the captures allow, like "a warehouse lead said so in their interview" or "it came up in two returns recordings". Use only facts from the captures: never make up sources, people, dates, quotes, or numbers, and don't stretch what was said. If you have no real proof the process happens, don't propose it. | |
| materializationMode | No | Use "proposal" to record a process the organization plausibly needs, owned by `teamId` for review, WITHOUT creating a real process record. `teamId` is then required. Chat-scoped discovery agents may use proposal mode for their pinned team; direct human and API callers require Manager-or-above authority for that team. A proposal is idempotent: an equivalent live proposal under the same parent is returned untouched rather than duplicated. Defaults to "auto", which materializes a real process when `teamId` is set — except in a landscape-onboarding chat, which may only propose, and so defaults to "proposal". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
All annotation hints are false, so the description carries the full disclosure burden. It discloses the critical behavioral distinction that proposal mode creates no real process record ('WITHOUT creating a real process record'), scopes idempotency to proposals ('an equivalent live proposal... is returned untouched rather than duplicated'), states the Manager-or-above authorization requirement, and reveals context-dependent defaulting (auto vs. proposal depending on caller context). The idempotency qualifier refines rather than contradicts idempotentHint=false, since auto mode creates new records.
Agents need to know what a tool does to the 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 main description is a single verb-first sentence with zero filler. Every phrase earns its place: 'manual' distinguishes from automated processes, 'in the organization's Process Landscape' anchors the resource, and 'either as an unassigned proposal or atomically assigned to an eligible team' compresses the entire mode distinction into one clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The two riskiest aspects — choosing proposal vs. auto mode and the role of teamId — are thoroughly covered by the combination of the main description and schema parameter docs, including auth, idempotency, and defaults. But with no output schema, the description never states what the tool returns (created process ID? proposal object?), parentId semantics are absent, and 'eligible team' eligibility criteria are undefined, leaving an agent to guess at failure conditions and result handling.
Complex tools with many parameters or behaviors need more documentation. Simple 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 33%, below the 50% threshold where a baseline 3 would suffice, so the description must compensate. The main description's 'unassigned... or atomically assigned' dichotomy maps usefully to teamId, and materializationMode's schema doc explicitly ties teamId to proposal mode ('owned by teamId for review'). The description parameter also has unusually detailed authorship guidance. However, parentId semantics are entirely unexplained, 'eligible team' is left undefined, and name/orgId receive no elaboration beyond field names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('Create a manual process in the organization's Process Landscape') and immediately disambiguates the tool's dual behavior: unassigned proposal versus atomically assigned creation. It meaningfully narrows scope with 'manual process' among a sibling list containing createClarityProcess, createClarityProcessNode, and createClarityLandscapeNode. It stops short of a 5 because it never names a sibling it is not (e.g., createClarityProcess), leaving some differentiation to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The materializationMode parameter description provides explicit when-to-use guidance: 'proposal' for plausible-but-unverified processes with teamId required and no real record created, 'auto' to materialize when teamId is set, plus the landscape-onboarding-chat exception that forces proposal mode. It also states caller constraints (chat-scoped discovery agents vs. direct human/API callers requiring Manager-or-above). No explicit comparison to sibling tools like createClarityProcess, so it misses the 'alternatives' component of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publishPulseDashboardPublish Pulse DashboardAInspect
Publish (share) a Duvo Pulse dashboard to your whole team or your whole organization, or revert it to private (creator only). When publishing, set permission to 'view' (teammates see the dashboard) or 'edit' (teammates can also iterate on it); organization-wide viewers outside the team always get view-only access.
| Name | Required | Description | Default |
|---|---|---|---|
| artifactId | Yes | ||
| permission | No | ||
| visibility | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations only declaring the operation mutates (readOnlyHint=false) without being destructive, the description adds meaningful constraints: organization-wide viewers always receive view-only access regardless of the permission value, and 'private' means creator-only. It also clarifies that the permission setting only governs teammates' access, which an agent could not infer from the schema alone. No contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two front-loaded sentences express the primary action, the reverse action, and the permission model with no wasted words. The parenthetical clarifications ('share', 'creator only', 'also iterate on it') are slightly repetitive but each adds precision rather than 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?
The description covers parameter semantics for the two enums and the resource type, which is the core of calling this tool correctly. It leaves gaps an agent would want for a non-idempotent mutation with no output schema: what the response looks like, who is authorized to publish, and what re-publishing (e.g., switching visibility or permission) does to existing shares.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full semantic burden, and it delivers on both enum parameters: it maps visibility values to their real-world meaning (private=creator only, team, organization) and defines permission (view vs edit, plus the org view-only override). artifactId is not elaborated, but its role as the dashboard identifier is obvious from the description and the uuid format in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action pair — 'Publish (share)' and 'revert it to private' — applied to a named resource, the Duvo Pulse dashboard, with explicit scopes (team, organization, creator). This makes the tool's function clearly distinct from dashboard-lifecycle siblings like createPulseDashboard, updatePulseDashboard, and deletePulseDashboard, though it never names an alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the trigger condition — an agent should call this when the goal is changing a dashboard's sharing scope — and it usefully covers the unshare case ('revert it to private'). However, it gives no explicit when-not-to-use guidance and does not name alternatives such as updatePulseDashboard for content changes or sendPulseDashboardMessage for targeted distribution, leaving tool selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refreshPulseDashboardRefresh Pulse DashboardAInspect
Trigger an on-demand data refresh of a Duvo Pulse dashboard. The dashboard regenerates its connection-sourced values in the background — poll GET /artifacts/{artifactId} for status.
| Name | Required | Description | Default |
|---|---|---|---|
| artifactId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral detail beyond the annotations: the refresh is asynchronous, runs in the background, and requires polling GET /artifacts/{artifactId} for status. This aligns with readOnlyHint=false, idempotentHint=false, and destructiveHint=false, with no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise, front-loaded sentences convey the trigger action, the background behavior, and the follow-up polling step. Every sentence earns its place with 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 single-parameter async mutation with no output schema, the description gives the essential workflow: trigger refresh, wait in background, poll for status. It could mention what the initial trigger response looks like or how long polling might take, but it is adequately complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides only artifactId with UUID format and 0% schema description coverage. The description compensates by referencing artifactId in the polling URL, indicating the parameter identifies the artifact whose refresh status should be checked. Since there is only one parameter, this is 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 states a specific action ('Trigger an on-demand data refresh'), a specific resource ('Duvo Pulse dashboard'), and the resulting behavior ('regenerates its connection-sourced values in the background'). This clearly distinguishes it from related siblings like updatePulseDashboard, createPulseDashboard, or refreshQueueAggregation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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: refresh the dashboard's connection-sourced data on demand, then monitor via polling. It does not explicitly discuss alternatives or when not to use it, but the context is specific enough that an agent can determine 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.
refreshQueueAggregationRefresh Queue AggregationBInspect
Force a fresh recompute of an aggregation definition.
| Name | Required | Description | Default |
|---|---|---|---|
| queue_id | Yes | The queue's unique identifier | |
| definition_id | Yes | The aggregation definition's identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish this is a mutating, non-idempotent operation, and the description adds the 'force fresh' semantics — implying it bypasses staleness checks and recomputes regardless of current state. However, it does not disclose whether the recompute is synchronous, whether it is expensive, what happens to the previously stored result, or what the response contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Seven words in a single sentence with the action verb 'Force' front-loaded. There is no filler, and every word contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should explain what a successful refresh returns, but does not. Combined with unresolved sibling ambiguity (evaluate vs refresh vs get result) and no mention of sync/async behavior or side effects on existing results, an agent is left guessing about the consequences of calling this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both queue_id and definition_id are fully documented in the schema with identifiers and formats. The description adds no parameter-level meaning, which matches the baseline 3 since the schema carries the full burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Force a fresh recompute') and a specific resource ('aggregation definition'), making the core action unambiguous. However, it does not distinguish itself from siblings like evaluateQueueAggregation or getQueueAggregationResult, so an agent must infer the difference between refreshing, evaluating, and reading a result.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus siblings such as evaluateQueueAggregation, getQueueAggregationResult, or createQueueAggregation. There are no exclusions, no conditions, and no mention of preconditions (e.g., the definition must already exist), leaving selection entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rejectAgentSuggestionReject Agent SuggestionBInspect
Dismiss a pending suggestion.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The suggestion's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds the 'pending' precondition, which is useful context beyond the annotations, and it does not contradict any annotation. However, it does not disclose whether dismissal is reversible, whether repeated calls error, or what state change occurs, despite idempotentHint being false for this state-changing action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with no filler, immediately stating the action and target. It is appropriately sized for a one-parameter tool and wastes no words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is minimally viable for a simple action: it names the operation and the schema documents the parameter. However, it lacks routing context for when to reject rather than accept or consume a suggestion, and with no output schema it does not clarify expected results or side effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents 'id' as the suggestion's unique identifier. The description adds no parameter-level detail, but the schema fully covers this, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Dismiss') and object ('a pending suggestion'), making the core function clear. It does not explicitly differentiate from sibling accept/consume suggestion tools, but the reject verb and resource make 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?
There is no guidance on when to use this tool versus alternatives like acceptClarityCaptureSuggestion, acceptClarityTeamAssignmentSuggestion, or consumeAgentSuggestion. The description implies pending suggestions are the target but does not state exclusions, prerequisites, or alternative conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
removeClarityLandscapeNodePersonRemove Clarity Landscape Node PersonADestructiveIdempotentInspect
Remove a person from the process behind a process landscape node, and revoke the process access they were granted when they were added.
| Name | Required | Description | Default |
|---|---|---|---|
| orgId | Yes | ||
| nodeId | Yes | A process landscape node that is linked to a real process. | |
| teamId | No | ||
| personId | Yes | The person entry to change, as returned by listClarityLandscapeNodePeople. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is destructive and idempotent, and the description adds meaningful context by specifying that the person's granted process access is also revoked, not just their node association. This clarifies a material side effect beyond what the annotations alone convey. It does not reveal additional limits such as permission requirements or irreversibility, but the annotation coverage lessens that burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that front-loads the primary action and immediately states the key side effect. There is no redundant phrasing or filler, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The core action and main side effect are covered, and the annotations plus schema handle required-parameter identification. However, the undocumented teamId parameter, lack of guidance on distinguishing this from removeClarityProcessMember, and no mention of prerequisites or authorization leave the description only partially complete for a destructive operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema describes only nodeId and personId, while orgId and teamId have no description, leaving 50% of parameters semantically uncovered. The tool description does not compensate by clarifying what orgId or teamId represent or how they affect the removal. This is a notable gap for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource combination: 'Remove a person from the process behind a process landscape node,' which clearly identifies the action and target. It also distinguishes itself from related tools by noting the additional consequence of revoking process access, separating it from simple removal or update operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: whenever a person should be removed from a landscape node and have their related process access revoked. However, it does not explicitly mention alternatives such as removeClarityProcessMember or updateClarityLandscapeNodePerson, nor does it state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
removeClarityProcessMemberRemove Clarity Process MemberADestructiveIdempotentInspect
Remove accepted access to a clarity process
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Clarity process ID. | |
| invitationId | Yes | Accepted process invitation to remove. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is destructive and non-read-only. The description adds the useful context that it removes accepted access rather than merely deleting an invitation, but it does not describe side effects, irreversibility, or any post-removal behavior beyond what destructiveHint already implies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler. It communicates the core action and target resource efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter destructive mutation whose safety profile is covered by annotations and whose parameters are fully documented, the description is sufficient. It could more explicitly state that it removes a member from the process, but no critical call-blocking context 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 both parameters are clearly documented in the schema. The tool description adds no additional meaning beyond what 'id' and 'invitationId' already 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 states a specific action ('Remove') and a specific resource ('accepted access to a clarity process'), so an agent can distinguish it from tools like deleteClarityProcess or deleteClarityProcessInviteLink. However, it relies on the title for the 'member' concept and does not explicitly differentiate itself from 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 word 'accepted' implies this tool is for removing members who have already accepted access, rather than pending invitations or invite links. No alternative tool is named and no explicit when-to-use or when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
removeRevisionIntegrationRemove Revision IntegrationADestructiveIdempotentInspect
Remove an integration from an agent revision. Removes the slot for everyone on the revision, including all per-user connection pins. Requires edit permission on the agent.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | Agent ID | |
| build_id | Yes | Build ID | |
| integration_id | Yes | Integration ID (catalog integration ID or slot ID from the list response) | |
| selected_automation_revision_id | No | The automation revision this edit is being made at. Pass a draft and the edit is folded into that draft itself; pass the active revision and the edit lands on a draft branched from it. A historic revision is rejected — it cannot be activated from without an explicit rebase. A revision belonging to a different automation is ignored, and the edit targets the automation the addressed agent belongs to. Omit to target the automation's active revision. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral details beyond the annotations: it explains the removal affects the slot for everyone on the revision and covers all per-user connection pins. It also notes the edit permission requirement. While it does not enumerate error conditions or exact side effects, the annotations already flag destructive and idempotent nature, and the description provides additional scope 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—two sentences—and directly states the action, scope, and a prerequisite. It is well-structured and free of unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool definition is complete for its purpose: it explains what it does, its effects, and required permissions. The absence of an output schema is acceptable given the destructive nature. It could mention potential error cases or relationship to unpin operations, but the provided information is sufficient for correct invocation in most contexts.
Complex tools with many parameters or behaviors need more documentation. 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 includes descriptions for all parameters, with integration_id and selected_automation_revision_id having detailed explanations (catalog/slot ID, branching behavior). agent_id and build_id are self-explanatory. The main description does not add parameter-specific meaning, but the schema coverage is good, so overall clarity 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 clearly states the tool removes an integration from an agent revision, and explicitly mentions it removes the slot for everyone on the revision including per-user connection pins. This distinguishes it from sibling tools like attachRevisionIntegrations or listRevisionIntegrations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 indicates the action (removing an integration) and the requirement for edit permission, which implies when it should be used. It does not explicitly contrast with similar functions like unpinRevisionIntegrationConnection, but the 'including all per-user connection pins' phrase differentiates the scope, so usage is reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
removeTeamMemberRemove Team MemberADestructiveIdempotentInspect
Remove a member from a team. Removing another member requires the Superadmin role or above; any member may remove themselves (leaving the team). The last remaining Owner cannot be removed, and a member whose Owner role is inherited from the organization can only leave voluntarily.
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| memberId | Yes | Member (user) ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag the tool as destructive and idempotent, but the description goes beyond them by disclosing role hierarchy requirements, self-removal behavior, and Owner protections. This is valuable behavioral context for a destructive membership 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 sentences, front-loaded with the core action and followed only by nontrivial constraints. No filler, no restating of schema fields, 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 destructive membership operation, the description covers authorization, self-removal, and Owner edge cases. Combined with the rich team_id schema and annotations, an agent has enough context to invoke it correctly; the only minor gap is explicit output/error behavior, which is not essential for a remove operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including detailed semantics for team_id and memberId, so the schema already carries the parameter documentation burden. The description adds no additional parameter-specific meaning beyond what the schema provides, so the baseline score 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?
Description states a specific verb ('remove') and resource ('a member from a team'). It is immediately distinguishable from sibling tools like removeClarityProcessMember or removeClarityLandscapeNodePerson, leaving no ambiguity about what operation 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?
Provides clear contextual rules: removing another member requires Superadmin or above, any member may remove themselves, the last remaining Owner cannot be removed, and inherited-Owner members can only leave voluntarily. These act as preconditions and edge-case exclusions, though it stops short of explicitly naming alternative tools such as updateTeamMemberRole.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
renameFileRename FileBInspect
Rename a file in team storage.
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| relativePath | Yes | Current path of the file relative to the team's storage root | |
| newFilenameOnly | Yes | New file name (no extension; the existing extension is preserved) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral detail beyond what annotations already imply: rename is a mutation and readOnlyHint=false. It does not mention side effects, overwrite behavior, reversibility, or response shape. The extension-preservation behavior exists only in the schema, not in the description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. It states the action and scope efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 3-parameter mutation with complete schema coverage and annotations, the one-line description plus schema is largely sufficient to invoke correctly. The lack of return-value or usage-selection detail is a minor gap given the low complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with detailed descriptions for team_id, relativePath, and newFilenameOnly. The description itself adds no parameter-level meaning, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb, resource, and scope: 'Rename a file in team storage.' This clearly distinguishes it from content-modifying siblings like updateFileContent. It does not explicitly contrast with a sibling tool, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, exclusions, or alternatives are provided. The description only restates the operation; the team_id schema note covers authentication context but not tool-selection decisions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reorderClarityFoldersReorder Clarity FoldersAInspect
Reorder the team's process folders to match the given id order. The payload must name every folder exactly once.
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| folderIds | Yes | Every team folder ID, in the desired display order. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a mutation (readOnlyHint=false) that is not marked destructive. The description adds the meaningful behavioral constraint that the payload must name every folder exactly once, implying a full-set reorder rather than a partial move. It does not disclose error behavior, validation failures, or what happens if some folders are omitted, so more context was possible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. The core action and resource are front-loaded, and the critical payload invariant is stated clearly in the second sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter mutation tool with no output schema, the description plus schema covers what the tool does and what inputs are needed. The main gap is the absence of expected response or error behavior, but the annotations and schema provide enough context for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including a detailed explanation of team_id and folderIds. The description adds value by reinforcing that folderIds must name every folder exactly once, which is a stronger invariant than the schema's 'Every team folder ID, in the desired display order.' This helps the agent avoid constructing a partial or duplicate list.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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: 'Reorder the team's process folders to match the given id order.' This clearly distinguishes it from sibling tools like reorderClarityLandscapeAreas, which operates on a different resource, and updateClarityFolder, which implies settings modification rather than ordering.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when folders need to be reordered to a specific id sequence. However, it does not explicitly contrast it with alternatives such as moveClarityProcessesToFolder or setupClarityFoldersFromLandscape, nor does it state when not to use it. The payload constraint is useful but is more about input construction than tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reorderClarityLandscapeAreasReorder Clarity Landscape AreasAIdempotentInspect
Reorder a sibling group of the organization's process landscape area folders left-to-right — the top-level areas by default, or the folder children of parentId (organization admin+). This changes display order only; use setClarityLandscapeNodePlacement to move a node to a different parent.
| Name | Required | Description | Default |
|---|---|---|---|
| orgId | Yes | ||
| parentId | No | The parent area whose folder children are being reordered. Omit or pass null to reorder the top-level areas. | |
| orderedAreaIds | Yes | Every area folder in the sibling group, exactly once, in the order you want them displayed left-to-right. Read the current siblings first (getClarityProcessTree); a partial list is rejected with 400. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavior beyond the annotations: it requires organization admin+, says the operation affects display order only, and the schema notes that partial lists are rejected with 400. These details are not implied by readOnlyHint, idempotentHint, or destructiveHint 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?
Two sentences carry the entire core meaning: the operation, default scope, parent variant, permission level, side-effect scope, and the alternative tool. The most important scoping information is front-loaded, with no filler or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The definition is complete enough for an agent to call the tool correctly: required ids, parent semantics, full-order constraint, read-first advice, and permission are all present. No output schema exists, so return-value documentation would be a minor enhancement, but its absence does not prevent 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 main description adds little parameter meaning beyond the schema: the schema already documents parentId's top-level/null behavior and orderedAreaIds' 'exactly once' full-sibling requirement. The description references parentId and sibling grouping, but does not substantially extend the property-level semantics already present.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Reorder'), a specific resource ('process landscape area folders'), and the scope ('sibling group... left-to-right'). It also distinguishes itself from setClarityLandscapeNodePlacement by clarifying that this tool only changes display order, not parent assignment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 explains the default case (top-level areas) versus the parentId case (folder children), and gives a direct alternative for reparenting: 'use setClarityLandscapeNodePlacement to move a node to a different parent.' The 'display order only' caveat is a clear when-not-to-use signal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
replaceCaseQueueEvalRubricsReplace Case Queue Eval RubricsADestructiveInspect
Replace the entire case-level evaluation rubric set on a queue's current version (1 to 12 rubrics). Existing rubrics are removed and the supplied list becomes the new set. An empty list is refused — whole-case evaluation regenerates rubrics for an empty set at the next settlement, so a cleared set would not stay cleared; remove individual rubrics instead. Targets the queue's current version (build-set), which exists once its first Agent-processed case settles — this fails with 409 before then. Cases already judged keep their original verdicts.
| Name | Required | Description | Default |
|---|---|---|---|
| rubrics | Yes | The complete case-level rubric set for the queue's current version (at least 1 rubric). Replaces every existing rubric. | |
| queue_id | Yes | The queue's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint=true annotation, the description reveals important side effects: existing rubrics are removed, an empty set would be regenerated by whole-case evaluation, the target is the current version, and already-judged cases retain original verdicts. This gives the agent a precise behavioral model with no contradiction to 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 compact and every sentence earns its place: main action, destructive behavior, empty-list rationale, version precondition and 409 error, and preservation of judged verdicts. The primary function is front-loaded with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive replace operation with no output schema, the description covers all critical operational edges: what is replaced, why an empty list is invalid, when the target exists, the error condition, and the effect on existing data. Nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the parameters are already fully documented. The description's mention of '1 to 12 rubrics' and 'supplied list becomes the new set' largely restates the schema's minItems/maxItems and replacement semantics rather than adding new parameter-level meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action and resource: 'Replace the entire case-level evaluation rubric set on a queue's current version.' The qualifiers 'entire' and 'current version' clearly separate it from sibling create/update/delete single-rubric tools like createCaseQueueEvalRubric or updateCaseQueueEvalRubric.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 not to use the tool ('An empty list is refused') and directs to an alternative ('remove individual rubrics instead'). It also provides a concrete precondition: the operation targets the queue's current build-set version and fails with 409 before it exists. This is clear when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
replaceEvalRubricsReplace Eval RubricsADestructiveInspect
Replace a build's entire Agent-specific evaluation rubric set in one call (at most 5 rubrics). Existing custom rubrics are removed and the supplied list becomes the new set; pass an empty array to clear them. Defaults to the Agent's live build; pass build_id to target a specific revision.
| Name | Required | Description | Default |
|---|---|---|---|
| agentId | Yes | The agent's unique identifier (Assignment ID) | |
| rubrics | Yes | The complete custom rubric set for the build. Replaces every existing custom rubric; pass an empty array to clear them. | |
| build_id | No | Replace the custom rubrics on this build (revision). Defaults to the agent's live build when omitted. | |
| selected_automation_revision_id | No | The automation revision this edit is being made at. Pass a draft and the edit is folded into that draft itself; pass the active revision and the edit lands on a draft branched from it. A historic revision is rejected — it cannot be activated from without an explicit rebase. A revision belonging to a different automation is ignored, and the edit targets the automation the addressed agent belongs to. Omit to target the automation's active revision. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal destructiveHint=true, and the description meaningfully elaborates: existing custom rubrics are removed, the supplied list becomes the new set, and empty array clears them. This adds a concrete behavioral consequence beyond the boolean flag, which is exactly what the tool's destructive nature requires.
Agents need to know what a tool does to the 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 with no wasted words. The primary action is front-loaded, the destructive replacement behavior is stated clearly, and the default/build_id targeting guidance is given compactly. 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 destructive operation with no output schema, the description covers the essential behavioral facts: whole-set replacement, the 5-rubric cap, clearing via empty array, and build targeting. Combined with the detailed schema and destructive annotation, nothing an agent needs to call 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?
Schema description coverage is 100%, so the baseline is 3. The description reinforces the 'entire set' and 'live build default' semantics, but the detailed meaning of each parameter, especially selected_automation_revision_id, is already fully documented in the input schema. The description does not need to compensate for gaps because there are none.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Replace'), a clear resource ('a build's entire Agent-specific evaluation rubric set'), and a precise scope ('in one call (at most 5 rubrics)'). It distinguishes itself from sibling per-rubric tools like createEvalRubric/updateEvalRubric/deleteEvalRubric by emphasizing whole-set replacement rather than individual edits.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 operational context: the default targets the live build, build_id selects a specific revision, and an empty array clears rubrics. It does not explicitly name alternatives or exclusion conditions, but the 'entire set in one call' framing implies when this tool should be preferred over per-rubric operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
replaceQueueJsonSchemaReplace Queue Json SchemaBIdempotentInspect
Replace a queue's Case schema with a new version. Every declared field is frozen against automated change, so this is the only way one can be edited.
| Name | Required | Description | Default |
|---|---|---|---|
| schema | Yes | ||
| queue_id | Yes | The queue's unique identifier | |
| change_summary | Yes | ||
| expected_schema_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds the key behavioral fact that declared fields are frozen against automated change, making this the sole edit mechanism—context not present in annotations. It omits potential side effects on existing cases/versions and does not mention authorization or rollback, but the annotations already cover the read-only/destructive/idempotent profile, and there is no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, each carrying information, with the core action first and the rationale second. No filler or redundant restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a multi-parameter mutation with one nested object and no output schema, this is incomplete: expected_schema_id and change_summary are undocumented in both schema and description, and the effect of replacing a schema on existing cases is not addressed. An agent could call it with malformed or insufficient input. However, the frozen-field rule and idempotency annotation do orient the 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 only 25%; only queue_id has a schema description. The description references 'Case schema' conceptually but does not explain the schema object structure, change_summary requirements, or expected_schema_id's concurrency role, so it fails to compensate for the low coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action—replace a queue's Case schema with a new version—and gives distinguishing context: because every declared field is frozen, this is the only editing path. It is not a tautology and separates the tool from generic queue tools, though it does not explicitly contrast with attachQueueJsonSchema/createQueueJsonSchema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 implies the trigger condition (when a declared schema field must be edited) and explains why this tool is the only path for that. However, it does not explicitly tell the agent when to prefer attach/create/detach siblings or state when not to use the tool, so the usage guidance is mostly inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
replaceRevisionIntegrationQueuesReplace Revision Integration QueuesAIdempotentInspect
Replace the set of queues linked to this build's case-queue integration slot. Send the full desired queue list — any queues not in the list will be unlinked. Requires edit permission on the agent. After linking, call getRevisionCaseQueueSetup to confirm the slot now reports linked_queue_count > 0.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | Agent ID | |
| build_id | Yes | Build ID | |
| queue_ids | Yes | Full set of queue IDs to link to this slot. Replaces any existing links. | |
| integration_id | Yes | Integration ID | |
| selected_automation_revision_id | No | The automation revision this edit is being made at. Pass a draft and the edit is folded into that draft itself; pass the active revision and the edit lands on a draft branched from it. A historic revision is rejected — it cannot be activated from without an explicit rebase. A revision belonging to a different automation is ignored, and the edit targets the automation the addressed agent belongs to. Omit to target the automation's active revision. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses the key side effect — 'any queues not in the list will be unlinked' — well beyond the annotations' readOnly/destructive hints. Also adds the permission requirement and the success criterion (linked_queue_count > 0), which function as a post-condition. This is consistent with idempotentHint=true, since submitting the same full list twice yields the same state; no contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with zero waste: the purpose, the replacement semantics, and the permission/verification steps. The critical 'full list' instruction is front-loaded immediately after the purpose statement, so an agent grasps the operational contract quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a moderate-complexity mutation tool with no output schema, the description covers purpose, side effects, permissions, and a verification path via getRevisionCaseQueueSetup, which effectively substitutes for return-value documentation. The remaining gap is that the direct response shape and edge-case behavior (e.g., an empty queue_ids array) are not addressed, though the confirm-call instruction mitigates this.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The selected_automation_revision_id parameter already has extensive draft/active/historic semantics in the schema, and queue_ids already documents 'Full set of queue IDs... Replaces any existing links.' The description reinforces queue_ids' full-set meaning and ties build_id/integration_id to the 'case-queue integration slot', but adds little net-new meaning 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 ('Replace') and a precise resource ('the set of queues linked to this build's case-queue integration slot'). The second sentence's 'full desired queue list' semantic makes the replace-all behavior unmistakable and separates it from additive siblings like attachRevisionIntegrations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a clear invocation pattern ('Send the full desired queue list — any queues not in the list will be unlinked'), a precondition ('Requires edit permission on the agent'), and a named follow-up call (getRevisionCaseQueueSetup). It does not explicitly contrast with additive alternatives such as attachRevisionIntegrations or listRevisionIntegrationQueues, so when-not-to-use is left partly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
respondToHumanRequestRespond To Human RequestAInspect
Respond to a human-in-the-loop request. Use 'approved' (true/false) for approval-type requests, or 'answers' ({question: answer}) for question-type requests. Only works when the run is in 'waiting' status.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | The run's unique identifier | |
| answers | No | For question-type requests: a map of question text to answer. Multi-select answers should be comma-separated. | |
| approved | No | For approval-type requests: true to approve, false to deny | |
| request_id | Yes | The human request's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond annotations by mentioning the 'waiting' status restriction and the conditional parameter usage. It does not elaborate on error handling or side effects, but the annotations already indicate read/write characteristics, so this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (two sentences) and well-structured, without redundant information. It front-loads the main action and immediately clarifies parameter usage, making it 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?
Given the lack of an output schema, the description adequately covers the core aspects: what it does, how to use it, and when it works. It does not mention potential edge cases (e.g., simultaneous 'approved' and 'answers'), but these are not critical for successful 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 provides full descriptions for all parameters (100% coverage), and the tool description adds value by explaining when to use 'approved' vs 'answers' based on request type. This goes beyond the schema's individual parameter descriptions, offering practical 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 ('Respond to a human-in-the-loop request') and specifies the exact resource and condition. It distinguishes itself from sibling tools by focusing on human-in-the-loop requests and the 'waiting' status, making it unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear precondition ('Only works when the run is in 'waiting' status') and explains how to use the approved vs. answers parameters. However, it does not explicitly state when to choose this tool over others (e.g., 'use this when a human request is pending'), but the context makes it inferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restorePulseDashboardVersionRestore Pulse Dashboard VersionAInspect
Restore a previous version of a Duvo Pulse dashboard, making it live again (requires edit access). Non-destructive — it moves the head pointer to the chosen version.
| Name | Required | Description | Default |
|---|---|---|---|
| artifactId | Yes | ||
| revisionId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it explains the mechanism ('moves the head pointer') and explicitly reassures non-destructiveness, which is valuable for an operation that sounds like a rollback. It also discloses the edit-access requirement. It doesn't discuss side effects on the previously live version, but annotations already cover destructive/read-only hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler; the core action and key caveats are front-loaded before the mechanism detail. Every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter operation with no output schema, the description covers the action, permission, and non-destructive semantics. It could add a pointer to listPulseDashboardVersions as the source of revisionId, but the current text is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explicitly map artifactId to the dashboard or revisionId to the target version; it only refers generically to 'the chosen version.' Parameter names and UUID patterns appear in the schema, but the description adds almost no semantic value for an agent deciding what to pass.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 clearly identifies the resource ('previous version of a Duvo Pulse dashboard') and the intended effect ('making it live again'). The non-destructive head-pointer mechanism further distinguishes it from destructive or revision-promotion siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context: use this when a previous dashboard version should become live, and it notes the edit-access prerequisite. It does not explicitly name alternatives or exclusions, but the dashboard/version scoping and head-pointer behavior separate it from promoteRevision and revertClarityProcessSnapshot.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revertClarityProcessSnapshotRevert Clarity Process SnapshotADestructiveIdempotentInspect
Archive a Clarity v2 snapshot of either kind. If the live row is archived, the repository auto-promotes the latest historic row of the same kind.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Snapshot kind to list | |
| process_id | Yes | The clarity process id | |
| snapshot_id | Yes | Snapshot id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation as destructive and idempotent, so the description adds value by specifying the concrete state change: archiving a snapshot, and if it is the live row, auto-promoting the latest historic row of the same kind. This goes beyond the generic destructive hint, though it stops short of describing return behavior or the non-live-row case.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The primary action is front-loaded, and the second sentence earns its place by explaining the important automatic promotion 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 three-parameter destructive operation, the description plus annotations and full schema coverage cover the essential state transition. The remaining gaps are minor: there is no output schema and no explicit statement about what happens when a non-live snapshot is archived, but the core behavior is clear enough for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline applies. The phrase 'either kind' loosely maps to the kind enum and the live/historic distinction adds context around snapshot_id, but the description does not provide parameter-specific detail beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a concrete verb and object: 'Archive a Clarity v2 snapshot of either kind,' and it explains the key side effect (auto-promotion of the latest historic row). It is clear about what the tool does, though it does not explicitly distinguish itself from closely related snapshot operations such as promoteClarityProcessSnapshot or saveClarityProcessSnapshot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to call this tool versus any of the many sibling snapshot tools. The conditional sentence describes a behavior that occurs if the live row is archived, but it does not state the intended trigger, prerequisites, or when an alternative like promote or save would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
saveClarityProcessSnapshotSave Clarity Process SnapshotAInspect
Save user edits as the live Clarity v2 snapshot for the selected kind.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Snapshot kind to list | |
| swot | No | SWOT analysis produced by the swot-analysis postprocessing agent. `undefined` = agent has not yet run; `null` = agent ran and produced no analysis. | |
| steps | Yes | ||
| summary | No | One short paragraph (3-5 sentences) describing the captured process at a glance. Surfaced at the top of the current-process tab so reviewers can orient themselves before scanning the steps. Example: "Customers order beer at the bar; the bartender greets them, picks an option matching their preference, pours and garnishes the glass, then rings the order through the POS before serving." | |
| process_id | Yes | The clarity process id | |
| projectedImpact | No | Answer-first, MECE-structured business case. 4-8 sentences of prose + one markdown assumptions table. Null when team context is insufficient to produce any quantitative or qualitative assessment. | |
| baselineSnapshotId | Yes | ||
| clarityCurrentProcessId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a non-read-only, non-idempotent operation, so the description's 'Save' wording is consistent. It adds a bit of context by specifying that the saved state becomes the 'live' snapshot for the selected kind, but it does not clarify whether the existing live snapshot gets replaced, what validation applies, or what happens on failure. With the annotation coverage present, this is acceptable but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler, front-loading the action ('Save user edits') and clarifying the target resource ('live Clarity v2 snapshot for the selected kind'). Every word earns its place; there is no redundant restatement of the title or 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 tool with 8 parameters, 4 required fields, and no output schema, this description is too thin. It does not explain the relationship between baselineSnapshotId and the snapshot being saved, what kinds mean in practice, what side effects the save triggers, or the fact that a complex steps array is being persisted. The rich nested schema covers the steps shape, but the top-level behavioral and data-flow context 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 63%, so the schema already carries substantial parameter documentation, but the description itself adds almost no parameter-level meaning beyond the phrase 'selected kind.' It does not explain the meaning or role of required fields like baselineSnapshotId or steps, and the schema's own description for kind ('Snapshot kind to list') appears copy-pasted from a list-like tool, which makes the description's 'selected kind' the only partial clarifier.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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: 'Save user edits as the live Clarity v2 snapshot for the selected kind.' This clearly distinguishes it from sibling tools like generateClarityProcessSnapshot, postprocessClaritySnapshot, promoteClarityProcessSnapshot, and revertClarityProcessSnapshot, which would have different purposes in the snapshot lifecycle.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 should be used after user edits are made and when a live snapshot for a particular kind should be persisted. However, it does not explicitly state when to avoid this tool, nor does it name or compare it to the many related snapshot tools in the sibling list, leaving the routing partly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchCasesSearch CasesAInspect
Search cases in a queue with rich filters (multi-status, date ranges, label-based filters). Use this when the simple query-string filters on GET /v2/queues/:queue_id/cases aren't enough. Set count_only=true to skip Case row selection, enrichment, and transformation. The normal response shape is returned with cases: [] and the matching total.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| search | No | ||
| filters | No | ||
| sort_by | No | created_at | |
| queue_id | Yes | The queue's unique identifier | |
| count_only | No | Skip Case row selection, enrichment, and transformation. The normal response shape contains an empty cases array and the matching total. | |
| sort_order | No | desc |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses behavior beyond annotations by explaining that count_only=true skips Case row selection, enrichment, and transformation while still returning the normal response shape with cases: [] and the matching total. This is useful operational detail that the 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 compact and front-loaded with the core purpose. Each sentence adds value: what it does, when to use it, and the count_only behavior. No filler or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 8 parameters, nested filters, no output schema, and no informative annotations, the description covers the primary decision and key behavior well. It could go further by describing the normal response shape or the search/sorting parameters, but the existing guidance is enough for a competent agent to invoke it correctly in the main 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?
With schema description coverage at only 25%, the description must compensate for sparse parameter documentation. It adds meaning for count_only and hints at filter semantics (multi-status, date ranges, label-based filters), but does not clarify search, limit, offset, sort_by, or sort_order. It partially compensates but leaves several parameters unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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: 'Search cases in a queue' with 'rich filters', and clearly differentiates from the simpler GET /v2/queues/:queue_id/cases endpoint. This lets an agent distinguish searchCases from listCases without inspecting the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit condition: 'Use this when the simple query-string filters on GET /v2/queues/:queue_id/cases aren't enough.' This tells the agent exactly when to select this tool over the lighter alternative, and implies the alternative for simple cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sendPulseDashboardMessageSend Pulse Dashboard MessageAInspect
Send an instruction to iterate on a Duvo Pulse dashboard (e.g. 'make it a bar chart', 'filter to last 14 days'). The creator can always iterate; teammates can too when the Pulse is published to the team with edit access. The agent regenerates asynchronously — poll GET /artifacts/{artifactId} for status.
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | ||
| artifactId | Yes | ||
| attachments | No | Attachments to hand the agent, uploaded beforehand via the upload-urls endpoint (max 5) | |
| from_revision_id | No | ||
| selected_element | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the asynchronous regeneration and the polling endpoint GET /artifacts/{artifactId}, plus the permission constraint for teammates. These go beyond the annotations (readOnlyHint=false, openWorldHint=true) to set agent expectations, though it does not explain overwrite or versioning 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?
Three sentences with the purpose front-loaded and the async polling detail placed last. There is no filler, repetition, or unnecessary background.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 correctly orients the agent to send an instruction and poll for status, but for a 5-parameter tool with nested objects and no output schema it should say more about what the immediate response contains, what statuses indicate completion, and the roles of from_revision_id and selected_element.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 20%, so the description must compensate, but it only implicitly distinguishes message and artifactId. It does not explain from_revision_id or selected_element, and attachments semantics are left to the schema. The examples help for message but not for the other parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Send an instruction to iterate on a Duvo Pulse dashboard' and gives concrete examples like 'make it a bar chart' and 'filter to last 14 days'. This clearly identifies the verb, resource, and purpose, and semantically separates it from siblings such as answerPulseDashboardQuestion and refreshPulseDashboard.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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: creators can always iterate, teammates can only when the Pulse is published with edit access, and the input is a natural-language instruction. It does not explicitly name alternatives or exclusion conditions, so it does not reach a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sendTeamInviteEmailSend Team Invite EmailAInspect
Email an invitation to its recipient. Use this to deliver an invitation created by createTeamInvite (which never sends mail on its own), or to resend one the recipient never received. The accept link is always built from the server-configured app origin.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ID of the invitation to email. | |
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| frontendUrl | No | Deprecated. Accepted for backward compatibility and IGNORED: the accept link is always built from the server-configured app origin, so a caller cannot point invitation emails at another host. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint=false, destructiveHint=false), the description adds two useful behavioral facts: createTeamInvite has no mail side effect, and the accept link is always derived from the server-configured app origin, so frontendUrl cannot override it. It does not detail auth/rate limits or post-send state changes, but the primary side effect—sending an email—is explicit.
Agents need to know what a tool does to the 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, each with a distinct job: main action, when to use, and server-origin constraint. No filler or duplication of schema content. The most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-object send action with only three parameters and no output schema, the description covers what the tool does, when to use it, its relationship to createTeamInvite, and a key behavioral constraint. It does not specify return/error behavior or what happens if the invitation was already sent, but these are minor for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already explains id, team_id, and the deprecated ignored frontendUrl. The description reinforces the id semantics contextually and explains why frontendUrl is irrelevant, but it does not add substantial param-level meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Email an invitation to its recipient,' naming a specific verb and object. It further distinguishes itself from createTeamInvite by stating that tool never sends mail on its own, and clarifies that this tool also handles resending. This is enough for an agent to differentiate it from siblings like listTeamInvites or bulkCreateTeamInvites.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 instructs when to use: to deliver an invitation created by createTeamInvite or to resend one the recipient never received. It names createTeamInvite as the companion creation tool that does not send mail, providing an alternative and the condition that selects this tool. The guidance is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setClarityLandscapeNodePlacementSet Clarity Landscape Node PlacementCIdempotentInspect
Move a process landscape node (team manager or above for team processes; organization admin for areas)
| Name | Required | Description | Default |
|---|---|---|---|
| orgId | Yes | ||
| nodeId | Yes | ||
| parentId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey that this is mutating, idempotent, and non-destructive. The description adds role requirements and clarifies the operation is a move rather than a general update. However, it doesn't disclose what happens to child nodes, whether parentId=null moves to root, or how placement ordering works, though annotations reduce the burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. The parenthetical role note is compact and relevant, and every word contributes to understanding the operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with three required parameters, no output schema, and zero parameter descriptions, this is under-specified. An agent cannot confidently infer the semantics of parentId=null, whether the tool reorders siblings, or how it differs from closely related landscape tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description does not explain orgId, nodeId, or parentId. The verb implies nodeId is the node being moved, but parentId accepting null and the meaning of placement are left entirely unspecified. The description fails to compensate for the undocumented schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb 'Move' and the resource 'process landscape node', making the core action identifiable. The role qualifier adds useful scope information. However, it doesn't name sibling tools like updateClarityLandscapeNode or reorderClarityLandscapeAreas, so differentiation is left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus related landscape tools such as updateClarityLandscapeNode or reorderClarityLandscapeAreas. The parenthetical about team manager/organization admin permissions is about authorization, not use-case selection. With a large sibling list, an agent receives no routing help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setClarityLandscapePrioritiesSet Clarity Landscape PrioritiesAIdempotentInspect
Set or clear heatmap priorities in one batch (team managers for their processes; organization admin+ across the organization)
| Name | Required | Description | Default |
|---|---|---|---|
| org_id | Yes | Organization whose landscape is being assessed. | |
| priorities | Yes | Process priority updates applied atomically. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide the core safety profile: not read-only, not destructive, idempotent. The description adds useful context about batching and authorization scope, but it does not need to repeat the annotation-covered traits. 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 one efficient sentence with the action front-loaded and the scope in a compact parenthetical. It conveys the key facts without filler, though the parenthetical is slightly dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given only two well-documented parameters, no output schema, and annotations covering read-only/idempotent/destructive traits, the description supplies the remaining essential context: batching, use scope, and role restrictions. It is sufficiently complete 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 input schema has 100% description coverage, with org_id and priorities both explained in the schema itself. The description adds the 'heatmap priorities' framing and batch behavior, but does not materially enrich the meaning of the individual parameters 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 ('set or clear'), a specific resource ('heatmap priorities'), and a batching property ('in one batch'). It also includes role-based scope (team managers vs organization admin+), which makes the tool's purpose precise and distinguishable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 parenthetical provides clear usage context by specifying who can apply priorities and at what scope: team managers for their own processes, organization admins across the whole organization. It does not explicitly name alternatives or exclusions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setupClarityFoldersFromLandscapeSetup Clarity Folders From LandscapeBInspect
Create one linked folder per landscape group node containing this team's processes. Idempotent: groups that already have a linked folder are skipped.
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotation Contradiction: the description explicitly claims 'Idempotent: groups that already have a linked folder are skipped,' yet idempotentHint=false in the annotations. Per rubric, a direct contradiction forces a score of 1 despite the text otherwise adding useful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero filler. The core action is front-loaded and the idempotency qualifier earns its place as essential behavioral context. Exceptionally tight for the information conveyed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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-optional-param tool with full schema coverage, the basics are covered: scope, behavior, and skip semantics. However, there is no output schema and the description omits what the tool returns, and the idempotency contradiction undermines reliability. Adequate with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%; team_id is fully documented in the input schema with type, format, pattern, and auth-context behavior. The description adds no parameter-level 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 ('Create') and resource ('one linked folder per landscape group node') with a scoping qualifier ('containing this team's processes'). This differentiates it from generic folder tools like createClarityFolder and listClarityFolders in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies its use case — batch scaffolding of folders from a landscape — but never explicitly states when to use it over createClarityFolder or how it relates to listClarityFolders/updateClarityFolder. No when/when-not guidance or named alternatives are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
startClarityExportStart Clarity ExportCInspect
Start a Clarity → SAP Signavio export job
| Name | Required | Description | Default |
|---|---|---|---|
| bpmnXml | Yes | ||
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| processId | Yes | ||
| connectionInstanceId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description only conveys that a job is started, implying a side effect, but says nothing about asynchronous behavior, returned identifiers, failure modes, or permissions. The annotations are all false-valued hints and provide minimal positive behavioral context, so the description needed to carry more weight and did not.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One clean, front-loaded sentence with no filler; every word contributes the action, source, and destination. It is concise but sits at the extreme low end of acceptable length for a non-trivial operation, so the brevity is credited but not maximally.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 and effectively no behavioral annotations, the description should explain what starting the job returns, how to monitor it, and what prerequisites are involved—none are present. The sibling set includes getClarityExport and listActiveClarityExports, but the description never routes the agent to them.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25% (team_id alone), and the description adds no meaning for the required parameters processId, connectionInstanceId, or bpmnXml. The direction phrase 'Clarity → SAP Signavio' hints that processId is the Clarity side and connectionInstanceId is the Signavio side, but bpmnXml remains unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete action ('Start') and a specific resource ('Clarity → SAP Signavio export job'), which distinguishes it from read-oriented siblings like getClarityExport and listActiveClarityExports. It is somewhat spare—it does not say what data is exported or what artifact type is involved—but the core purpose is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool, what prerequisites are required (e.g., an existing connection instance or prepared BPMN), or how this relates to follow-up tools like getClarityExport. The description leaves all usage decisions to the agent's inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
startNativeOAuthStart Native OAuthAInspect
Start an OAuth-based connection with a native provider (Gmail, Google Sheets, Outlook, etc.). Returns an authorization URL that must be opened in a browser by a human end-user; once they grant consent, Duvo creates the matching connection and redirects the browser to the optional return_url (or the Duvo dashboard if none is provided). Poll /v2/teams/:team_id/connections to detect the new connection.
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| provider | Yes | OAuth provider slug (e.g. 'google', 'gmail', 'googlesheets', 'outlook'). Must match a configured native OAuth provider. | |
| return_url | No | Where to send the user's browser after OAuth completes. | |
| reconnect_instance_id | No | When set, the OAuth flow will update the existing connection in place rather than creating a new one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations by explaining that the call returns an authorization URL, requires a human to open it, and only creates the connection after consent. It also tells the agent to poll the connections endpoint, which is valuable non-obvious behavioral guidance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose, then expands into the critical flow details. Every sentence contributes useful information 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?
For a tool with no output schema, the description fully explains the return value, the asynchronous human step, the post-consent behavior, and how to detect the result. This is complete enough for an agent to understand the entire expected flow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter is already well documented in the schema. The description adds minimal parameter-level meaning beyond what the schema provides, which matches 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 clearly states the tool starts an OAuth-based connection for native providers, which is a specific action on a specific resource type. It also distinguishes itself from generic connection tools by describing the human-in-the-loop authorization URL flow and naming example providers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool: when connecting to a native provider requiring OAuth consent. It does not explicitly name alternative tools or state when not to use it, but the native-provider and human-consent framing makes 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.
startRunStart RunAInspect
Start a new agent run. Returns immediately with run info - does not wait for completion.
| Name | Required | Description | Default |
|---|---|---|---|
| message | No | Optional initial message to start the run with (e.g. a trigger payload or user instruction) | |
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| agent_id | Yes | The agent ID to run | |
| sandbox_id | No | Optional sandbox ID with pre-uploaded files | |
| webhook_url | No | Webhook URL to POST events to (human_request, run_completed, run_failed, run_interrupted) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate this is non-read-only, non-idempotent, and not destructive. The description adds a meaningful behavioral fact beyond those: the run starts and the call returns immediately without waiting for completion. This is valuable because it sets agent expectations about the tool's asynchronous nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero wasted words. The core action is front-loaded, and the key behavioral caveat ('does not wait for completion') is placed immediately after the action 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?
The description covers the essential async contract and the schema documents all parameters, including webhook event types. It does not specify the exact shape of 'run info' or how to retrieve the run later, but sibling tools like getRun and the webhook_url parameter fill most of that gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters are already documented with meaningful descriptions, including the nuanced team_id behavior. The tool description itself adds no parameter-specific meaning, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Start a new agent run') and adds a distinguishing async behavior ('Returns immediately with run info - does not wait for completion'). This clearly separates it from sibling tools like getRun, listRuns, and stopRun without needing to open the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly states when to use the tool: when starting a new agent run. The async disclosure implies you should not expect completion results synchronously, giving useful context. However, it does not explicitly name alternatives like getRun for polling status or stopRun for cancellation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stopClarityArtifactChatConversationStop Clarity Artifact Chat ConversationAInspect
Stop an in-flight artifact-chat turn. Flips the conversation back to open first so the interrupted run's late webhooks are dropped as stale, then best-effort interrupts the cc-server execution.
| Name | Required | Description | Default |
|---|---|---|---|
| process_id | Yes | ||
| conversation_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the tool flips the conversation to open to drop late webhooks, and that the interruption is best-effort, indicating potential failure. This goes beyond the annotations (which only state non-idempotent and non-destructive) by detailing side effects and limitations, though it does not cover all possible error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, concise, and directly addresses the tool's action and effect. No redundant information is included, and the structure is logical.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 provides sufficient context for an agent to understand the tool's purpose and effect, including the state change and best-effort nature. However, it does not explain how to determine if a turn is in-flight or what happens if the turn is not in-flight, leaving minor contextual gaps. Given there is no output schema, 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?
Both parameters are required UUIDs, but the schema provides no descriptions and the description adds no semantic detail beyond the parameter names. While the names process_id and conversation_id are self-explanatory, the tool does not clarify their exact roles or relationship to the artifact-chat turn.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 that the tool stops an in-flight artifact-chat turn, which is a specific verb (stop) and resource (artifact-chat turn). It also explains the action of flipping the conversation back to open, distinguishing it from deletion. This is precise 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 usage when a turn is in-flight and needs to be halted, and contrasts with deletion by noting it only flips to open. However, it does not explicitly name sibling tools like deleteClarityArtifactChatConversation, so the distinction is implicit rather than explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stopClarityProcessSnapshotStop Clarity Process SnapshotAInspect
Stop an in-flight snapshot generation for the selected kind. Reads the sandbox id from the process row, kills the sandbox, flips the process back to review, and clears the sandbox marker so any late webhook from the killed run is dropped as stale.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Snapshot kind to list | |
| process_id | Yes | The clarity process id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the full behavioral sequence: reads sandbox id, kills the sandbox, flips the process back to review, clears the sandbox marker, and drops late webhooks as stale. This goes far beyond what the annotations convey and gives the agent an accurate model of the tool's side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The purpose is front-loaded, and the mechanism/side effects are compactly explained without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutating action with no output schema, the description fully explains what will happen, what state changes occur, and how stale webhooks are handled. An agent can confidently call this tool and understand its consequences.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds minimal parameter meaning beyond stating 'selected kind' and referencing the process row/sandbox id. The schema's own 'Snapshot kind to list' description is slightly misleading, but the tool description's verb 'stop' helps disambiguate the intended operation.
Input schemas describe structure but not intent. Descriptions should explain 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: 'Stop an in-flight snapshot generation for the selected kind.' This clearly distinguishes the tool from generate/get/list/promote/revert snapshot siblings and from generic stop tools like stopRun or stopClarityArtifactChatConversation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 'in-flight snapshot generation' provides clear usage context: this tool is for cancelling an ongoing snapshot generation. It does not explicitly mention exclusions or alternatives, but the condition is clear enough to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stopPulseDashboardMessageStop Pulse Dashboard MessageAInspect
Stop an in-flight Duvo Pulse generation turn. Requires edit access to the dashboard. Flips the dashboard to 'interrupted' and keeps any streamed-so-far reply; stopping when nothing is generating is a successful no-op.
| Name | Required | Description | Default |
|---|---|---|---|
| artifactId | Yes | ||
| partial_text | No | The assistant text streamed so far, kept in the conversation as the partial reply. Omit when calling from an API client without streaming state. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the sparse annotations, the description explicitly discloses side effects: flips the dashboard to 'interrupted', keeps the streamed-so-far reply, and is a successful no-op if nothing is generating. This provides clear expectations about the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured, consisting of two sentences that efficiently convey purpose, precondition, side effects, and idempotency without unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, enums, or nested objects, the description covers the essential aspects: purpose, precondition, state change, and no-op semantics. It does not discuss potential error cases or exact response shape, but these are not required given the context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: partial_text has a helpful description, but artifactId lacks any description beyond its name and format. The tool description adds no additional parameter clarification. Since one parameter is well-documented and the other is self-explanatory, the score is moderate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to stop an in-flight Duvo Pulse generation turn. It uses a specific verb (stop) and resource (Pulse Dashboard generation), and explains the resulting state change and the no-op behavior, effectively distinguishing it from sibling tools like sendPulseDashboardMessage or answerPulseDashboardQuestion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (to abort an in-flight generation), states a precondition (requires edit access), and explains the behavior when nothing is generating. It does not explicitly contrast with other stop tools (e.g., stopRun) but provides sufficient guidance for this context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stopRunStop RunAInspect
Stop an agent run. No-op if the run is not currently running.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | The run's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a state-changing (readOnlyHint=false), non-destructive operation. The description adds the important no-op edge case beyond those hints, but it does not disclose return values, error behavior, or cancellation semantics for a running run.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences deliver the core action and the critical edge case with no unnecessary filler. The description is well front-loaded and appropriately sized for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 and the notable already-stopped case. It could mention success/error responses, but the operation is simple enough that an agent has sufficient information to select and invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents run_id as the run's unique identifier, so the schema carries the parameter semantics. The description adds no additional parameter meaning beyond what is already present, warranting the baseline score 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-object pairing, 'Stop an agent run', that clearly names the resource and action. It distinguishes this tool from startRun/getRun and from other stop* siblings that act on different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The no-op clause provides clear contextual guidance: if the run is not currently running, the call has no effect, so an agent doesn't need to be concerned about stopping an already-finished run. It does not explicitly list alternatives, but the simple and complementary nature of the action makes 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.
unlinkCaseLabelsUnlink Case LabelsCInspect
Remove the given labels from a case.
| Name | Required | Description | Default |
|---|---|---|---|
| case_id | Yes | The case's unique identifier | |
| queue_id | Yes | The queue's unique identifier | |
| label_ids | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, so 'Remove' is consistent and no contradiction exists. However, the description adds no behavioral detail beyond the bare action: nothing about idempotency (what happens if a label isn't attached), atomicity (partial failure if one label_id is invalid), or whether the operation affects other case data. For a mutating tool with all-false annotations, this is thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single 8-word sentence with the action verb front-loaded and zero filler. It earns high marks for efficiency, though it is arguably so sparse that it sacrifices informative content — a tradeoff reflected in the other dimension scores.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 should convey what the caller gets back (success confirmation, updated case, etc.), but it doesn't. It also fails to clarify queue_id's necessity or failure behavior. For a 3-parameter mutating tool with no annotation or schema support, an agent is left guessing key operational details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 67% schema coverage, case_id and queue_id have basic schema descriptions, but the role of queue_id is never explained — it is unclear why a queue identifier is required to unlink case labels. label_ids lacks a property-level description, and the tool description only loosely maps 'the given labels' to label_ids without clarifying relationships or constraints among the 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 'Remove the given labels from a case' uses a specific verb (remove) and names both the resource (labels) and the scope (a case). It is clearly distinguishable from sibling unlinkClarityProcessLabels by the 'case' qualifier, and from assignCaseLabels by being the inverse operation. It doesn't explicitly name sibling alternatives, but the action and resource are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus assignCaseLabels or other label-related tools, and no exclusions or prerequisites are stated. The only signal is the terse action itself, which leaves context selection entirely implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unlinkClarityProcessLabelsUnlink Clarity Process LabelsAInspect
Remove process tags from a process.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| labelIds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations show readOnlyHint=false, destructiveHint=false, and idempotentHint=false, which are somewhat contradictory for a removal operation. The description clarifies it's a non-destructive modification (removing links, not deleting the process or labels), but doesn't specify whether it's idempotent or what happens if labels are not currently linked. Given the annotations, the description adds useful context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that fully captures the operation. No unnecessary words or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and only two required parameters, the description is complete for the invocation. However, it doesn't mention potential errors like if the process or labels don't exist, or if the labels are not currently linked. Given the simplicity, the description is adequate but not exhaustive.
Complex tools with many parameters or behaviors need more documentation. 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 parameter names and types are self-explanatory: 'id' identifies the process and 'labelIds' is an array of label UUIDs. The minItems=1 and maxItems=50 constraints are clear from the schema. The description doesn't need to explain them further, though it could clarify that 'labelIds' must correspond to currently assigned labels.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Remove') and the resource ('process tags' from 'a process'). It distinguishes this from related tools like assignClarityProcessLabels and listClarityProcessAssignedLabels, though it doesn't explicitly name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when tags need to be removed, but there is no explicit guidance on when to use this tool versus alternatives like updateClarityProcess or deleteClarityProcessLabel. The context is clear enough for a straightforward removal operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unpinRevisionIntegrationConnectionUnpin Revision Integration ConnectionADestructiveIdempotentInspect
Unpin one of your connections from this build's integration slot. The connection itself is not deleted; only the binding to this slot is removed.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | Agent ID | |
| build_id | Yes | Build ID | |
| connection_id | Yes | Connection ID to unpin | |
| integration_id | Yes | Integration ID (catalog integration ID or slot ID from the list response) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses exactly what is affected: only the binding to the integration slot is removed, and the underlying connection survives. This adds valuable nuance to destructiveHint=true and gives the agent a precise mental model of the side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no wasted words. The action is front-loaded, and the clarifying non-deletion note earns its place by preventing a costly misunderstanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 mutating operation, the description covers the essential effect and non-effect completely, and the schema covers parameters fully. It could add a bit more about prerequisites or expected result, but nothing critical is missing for an agent to call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters. The description adds only contextual framing ('this build's integration slot') and does not materially improve per-parameter understanding beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Unpin') and a specific resource ('one of your connections from this build's integration slot'). It explicitly contrasts with deletion, which distinguishes this tool from deleteConnection and removeRevisionIntegration and clarifies its relationship to pinRevisionIntegrationConnection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 contextual guidance: use this when you want to remove the binding but keep the connection itself. It implicitly excludes deletion use cases and clarifies the scope of the operation, though it does not explicitly name alternative sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateAgentUpdate AgentCInspect
Update an agent's display name or delivery settings.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New agent display name. | |
| pinned | No | Pin the agent to the top of your agents list (true) or unpin it (false). Per-user — each viewer has their own pin. A team on Automations has no agents list for a pin to order, so a pin or unpin there is refused with a 409. | |
| agent_id | Yes | The agent's unique identifier | |
| thread_id | No | Thread id to associate with the agent, or null to clear. | |
| slack_enabled | No | Whether the agent is reachable via Slack. | |
| agentic_memory_enabled | No | Toggle agentic memory for the agent. | |
| microsoft_teams_enabled | No | Whether the agent is reachable via Microsoft Teams. | |
| computer_use_vpn_config_id | No | "direct" to durably pin direct internet (no VPN, immune to future team-default changes), a VPN config UUID to pin that network, or null to follow the team default. | |
| computer_use_sandbox_template_id | No | "standard" to durably pin the standard Duvo desktop (immune to future team-default changes), a template UUID to pin that desktop, or null to follow the team default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate that the operation is not read-only and not destructive; no further safety signals are provided. The description adds no behavioral context such as whether omitted fields are left unchanged, whether the operation is a partial update, what permissions are required, or what error conditions exist beyond what the schema already documents. For a mutating tool with sparse annotations, this is a meaningful gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, short sentence with no filler or redundant wording, making it easy to scan. The brevity sacrifices completeness, but conciseness itself is handled well and the key action and resource are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a 9-parameter update tool with no output schema and sparse annotations, so the description needs to carry more orienting weight. It does not convey the breadth of settings that can be updated, whether updates are partial or full replacements, or any side-effect/error context beyond the schema's own parameter descriptions. The rich schema helps, but the description alone leaves an agent under-informed about the tool's full scope and behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 9 parameters in detail, including nuanced behavior for pinned, VPN config, and sandbox template. The description adds only a loose summary ('display name or delivery settings') that under-represents the full parameter set, but since the schema carries the semantic load, a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action, 'Update', a resource, 'agent', and a scope, 'display name or delivery settings', which helps distinguish it from sibling tools like updateAgentCaseTrigger and updateAgentFolder. However, 'delivery settings' is somewhat vague and the description omits other updateable aspects such as pinned state, agentic memory, thread association, and computer-use network/desktop settings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like createAgent, deleteAgent, duplicateAgent, or updateAgentCaseTrigger. It does not state exclusions, prerequisites, or direct the agent to a more appropriate sibling, so the agent must rely on the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateAgentCaseTriggerUpdate Agent Case TriggerAInspect
Update fields on a case trigger. Only the trigger creator or a builder/admin can disable an enabled trigger or change its queue, and only a builder/admin can change queue concurrency.
| Name | Required | Description | Default |
|---|---|---|---|
| enabled | No | Whether the trigger is active. Disabled triggers do not dispatch runs. | |
| agent_id | Yes | The agent's unique identifier | |
| trigger_id | Yes | The case trigger's unique identifier | |
| concurrency | No | Concurrency cap for the trigger's queue. The cap is queue-wide, so this affects every Agent working the queue, not just this trigger. Only 1 (run cases one at a time) or null (reset the whole queue's cap to the platform default) can be set here; higher caps are configured per-queue via PATCH /v2/admin/case-queues/{queueId}/concurrency. Omit to leave the current value unchanged. | |
| case_queue_id | No | Queue whose new cases should trigger this agent |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly=false, destructive=false, and idempotent=false. The description adds meaningful behavioral context about authorization requirements for specific field changes, which is not captured in the annotations. It does not describe side effects, but the low-risk annotations reduce the need for that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The first sentence states the action, and the second adds the key permission constraints. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a straightforward update operation with a fully documented schema, the description covers the important constraints. It does not describe the return value, but no output schema exists and that is a minor gap for an update 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 goes beyond the schema by clarifying role-based permissions for enabled, case_queue_id, and concurrency, telling agents which fields they may be allowed to change.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Update') and resource ('fields on a case trigger'), which clearly distinguishes it from create/delete/get/list siblings. It conveys that this modifies an existing case trigger rather than creating or removing one.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 permission context: only the trigger creator or a builder/admin can disable or change the queue, and only a builder/admin can change concurrency. This helps an agent decide whether the call is permitted, though it does not explicitly name alternatives like createAgentCaseTrigger.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateAgentFolderUpdate Agent FolderAInspect
Rename an agent folder or move it to a new parent.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New folder name | |
| folder_id | Yes | The folder's unique identifier | |
| parent_folder_id | No | New parent folder ID. Pass null to move the folder to the root level. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate this is not read-only (readOnlyHint false) and not destructive (destructiveHint false), but the description adds no details about side effects, idempotency, or potential failures. It does not disclose whether renaming affects child folders or if moving changes hierarchy in any other way.
Agents need to know what a tool does to the 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 fits the essential information without fluff. It is front-loaded with the primary action and directly states what the tool does.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 parameter set and lack of an output schema, the description is sufficient for an agent to understand the operation's purpose and invocation. No additional context is required for this straightforward update action.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All parameters are documented with clear semantic meaning. 'name' is described as 'New folder name', 'parent_folder_id' explains the null case for moving to root, and 'folder_id' is clearly the unique identifier. Schema coverage is 100%.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Rename' or 'move') on a specific resource ('agent folder'), distinguishing it from sibling create/delete/list operations. It conveys the exact scope of the operation without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for modifying an existing folder but does not explicitly mention when to prefer this over creating, deleting, or moving multiple folders. Alternatives like 'moveAgentsToFolder' are not referenced, leaving some room for interpretation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateAutomationUpdate AutomationAInspect
Update an automation, e.g. rename it. Only the fields present in the body are changed.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New human-readable automation name. | |
| automation_id | Yes | Automation ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While annotations already indicate this is a non-read-only, non-destructive operation, the description adds a valuable behavioral guarantee: 'Only the fields present in the body are changed.' This clarifies partial-update semantics and assures an agent that unspecified fields are preserved, going beyond what the annotations alone communicate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. The primary action is front-loaded, and the partial-update nuance is stated immediately after, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter update tool, the description plus schema and annotations are largely sufficient: required identifier, optional field, and partial-update behavior are all covered. It does not describe return values or failure behavior, and with no output schema, a little more detail there would make it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents both parameters with descriptions, so the baseline is 3. The description adds meaning by explaining that the name parameter is used for renaming and that only included body fields are modified, which clarifies how automation_id and name interact during an update.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action and resource: 'Update an automation,' with a concrete example ('e.g. rename it') that signals the intent. It does not explicitly name or differentiate from the sibling createAutomation/deleteAutomation tools, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus createAutomation, deleteAutomation, getAutomation, or listAutomations. It does not state prerequisites, exclusions, or alternatives; the only usage signal is the verb 'Update,' which is implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateCaseUpdate CaseAInspect
Edit a case's title and/or its free-form data payload. Provide at least one field. Works on pending, in-progress, and settled cases. Other attributes (status, priority, labels) have their own dedicated endpoints. Returns the updated case with its event history and approval batches.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | New free-form data payload handed to the agent when the case is claimed. | |
| title | No | New case title (1–500 characters). | |
| case_id | Yes | The case's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only signal that this is not read-only, not idempotent, and not destructive. The description adds meaningful behavioral context by naming the supported case states, the validation requirement, and the return payload (updated case with event history and approval batches). It does not fully disclose side effects such as what event history entries get created, but it goes 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 compact and front-loaded: purpose first, then the critical constraint, then supported states, alternatives, and return value. Every sentence carries useful information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter tool with no output schema, the description covers everything needed to call it correctly: targeted fields, at-least-one requirement, supported case states, what it does not do, and what it returns. No essential context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by stating 'Provide at least one field', which is a semantic constraint not encoded in the schema, and by clarifying that title and data can be updated individually or together with 'and/or'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 'Edit', names the resource (a case), and scopes the operation to the title and free-form data payload. It also distinguishes this tool from sibling tools by noting that status, priority, and labels have their own dedicated 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?
It explicitly states when to use the tool ('Works on pending, in-progress, and settled cases') and when not to use it for other attributes, directing those to dedicated endpoints. The requirement to 'Provide at least one field' is clear usage-level guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateCaseQueueEvalRubricUpdate Case Queue Eval RubricADestructiveInspect
Edit a single case-level evaluation rubric's title and/or description. The edit produces a NEW rubric (with a new id and slug) so previously judged cases stay attributed to the original criterion; the response contains the new rubric.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Short, human-readable Pass/Fail rubric title. | |
| queue_id | Yes | The queue's unique identifier | |
| rubric_id | Yes | The case-level rubric's unique identifier | |
| description | No | A 1-2 sentence Pass condition phrased as a question. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal mutation/destructiveness, but the description adds critical behavior beyond them: the update creates a NEW rubric with a new id and slug, preserves attribution of previously judged cases, and returns the new rubric. This is valuable context that prevents an agent from assuming an in-place update.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The first sentence states the action and scope, and the second delivers the critical side-effect information about new IDs, attribution preservation, and the response. 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 4-parameter mutation tool with full schema coverage and annotations, the description covers the essential missing piece: the non-obvious create-new-rubric behavior and the response shape. No output schema exists, but the description explicitly states the response contains the new rubric, making the tool sufficiently complete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema already documents all four parameters with descriptions and constraints. The description adds no parameter-specific meaning beyond naming title and description as the editable fields, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Edit') with a clearly defined resource ('a single case-level evaluation rubric's title and/or description'). It distinguishes this tool from siblings like createCaseQueueEvalRubric, replaceCaseQueueEvalRubrics, and deleteCaseQueueEvalRubric by emphasizing 'single' and 'case-level', so an agent can select it 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 implies the tool is for editing only the title and/or description of a single case-level rubric, and it explains a key condition: the edit produces a new rubric so previously judged cases stay attributed to the original criterion. However, it does not explicitly name alternatives or state when-not-to-use, so guidance is implied rather than fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateClarityFolderUpdate Clarity FolderAInspect
Rename a process folder. Renaming a landscape-linked folder permanently stops landscape name-sync.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | New folder name. | |
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| folderId | Yes | Folder to rename. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds a significant behavioral disclosure: renaming a landscape-linked folder permanently stops landscape name-sync. This goes beyond the annotations, which only state readOnlyHint=false and destructiveHint=false, and informs the agent of an irreversible side 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?
The description is two sentences with no filler. It front-loads the core action and then gives the critical caveat. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple rename operation with two required parameters and no output schema, the description is mostly complete. It supplies the essential permanent side-effect warning, though it does not describe return values or error behavior, which is not critical here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with detailed descriptions already present for folderId, name, and team_id. The description itself adds no new parameter meaning, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Rename a process folder.' This clearly differentiates it from related tools like createClarityFolder, deleteClarityFolder, and reorderClarityFolders. The phrase 'process folder' adds precision beyond the title.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys when the tool is used—renaming a process folder—but does not explicitly mention alternatives or exclusion conditions. The warning about landscape-linked folders implies a when-not-to-use scenario, but no sibling tool is named or recommended.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateClarityGuidanceUpdate Clarity GuidanceBInspect
Update the automation guidance message for a clarity process
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The clarity process ID | |
| content | Yes | Replacement automation guidance for the process. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description essentially restates the mutating nature already encoded by readOnlyHint=false. It does not disclose what happens to existing guidance, whether the referenced clarity process must already exist, or any side effects. Annotations provide some baseline, but the description adds little 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 a single, front-loaded sentence with no filler. Every word contributes to identifying the action and target resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with detailed schema descriptions and annotations, this is minimally viable. However, it lacks sibling differentiation and any note about replacement semantics or error conditions, so it is not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both id and content are already documented structurally. The description's 'automation guidance message' and 'clarity process' language aligns with the parameters but adds no additional semantic detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action, 'Update', a specific resource, 'automation guidance message', and scopes it to 'a clarity process'. This distinguishes it from generic process-update tools, though it does not explicitly differentiate it from createClarityGuidance or updateAutomation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives like createClarityGuidance, updateClarityProcess, or updateAutomation. The usage context is only implied by the verb 'Update' and the parameter descriptions, with no explicit when-to-use or when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateClarityLandscapeNodeUpdate Clarity Landscape NodeAInspect
Rename a process landscape node or update its owner label (team manager or above for team processes; organization admin for areas)
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| orgId | Yes | ||
| nodeId | Yes | ||
| ownerLabel | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, non-idempotent, non-destructive mutation, and the description adds the role/permission requirement. It does not disclose what happens when ownerLabel is null, whether both fields can be updated together, or what success/failure responses look like, but the simple update nature and annotation coverage keep the gap 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?
One compact sentence with the verb and object front-loaded and a parenthetical for role constraints. There is no redundant restatement of the title or schema fields; every part of the sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers what the tool does and who can use it, but not complete call semantics: it lacks alternative routing among the many Clarity landscape siblings, null/clear behavior for ownerLabel, and return/error expectations. For a simple update with no output schema, it is adequate but not thorough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must carry parameter meaning, and it does for name and ownerLabel ('rename' and 'update its owner label'). It leaves orgId and nodeId unexplained and does not mention that ownerLabel accepts null to clear the label, so the compensation is partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with explicit actions 'Rename a process landscape node or update its owner label', identifying the exact resource and the two update operations. This clearly separates it from sibling mutators like updateClarityLandscapeNodePerson and assignClarityLandscapeNodeTeam without needing to inspect their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical provides authorization context ('team manager or above for team processes; organization admin for areas'), which helps the agent know prerequisites for using this tool. However, it does not explicitly state when not to use this tool or direct users to alternative siblings for person/team/placement updates; usage context is only implied by the verb and resource.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateClarityLandscapeNodePersonUpdate Clarity Landscape Node PersonAInspect
Change the role a person plays in the process behind a process landscape node (for example "Approver"). Send role: null to clear it.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | ||
| orgId | Yes | ||
| nodeId | Yes | A process landscape node that is linked to a real process. | |
| teamId | No | ||
| personId | Yes | The person entry to change, as returned by listClarityLandscapeNodePeople. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry write intent (readOnlyHint=false) and non-destructiveness (destructiveHint=false). The description adds one non-obvious behavioral detail: null clears the role rather than being an invalid value. It does not disclose side effects, permissions, or the outcome for the person assignment when the role is cleared.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no filler. The core action is front-loaded, and the second sentence efficiently communicates the important null-clearing 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?
Adequate for a simple write operation with no output schema: the description covers the intent and the key role nuance, and the schema documents nodeId and personId. However, it omits expected return behavior, failure conditions, and any guidance for the optional teamId 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 only 40%, so the description needs to compensate. It does add real meaning for the role parameter by explaining it semantically and giving an example, but it does not describe orgId or teamId, leaving those to be inferred from their names.
Input schemas describe structure but not intent. Descriptions should explain 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 ('Change'), a precise object (the role a person plays in the process behind a process landscape node), and gives a concrete example ('Approver'). This clearly distinguishes it from sibling add/remove/list tools 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?
Provides useful operational guidance ('Send role: null to clear it') but does not explicitly say when to prefer this tool over addClarityLandscapeNodePerson or removeClarityLandscapeNodePerson. The intended usage is inferable from the action 'change the role', but no alternative routing is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateClarityOrganizationInterviewUpdate Clarity Organization InterviewCInspect
Rename an organization landscape Clarity capture
| Name | Required | Description | Default |
|---|---|---|---|
| orgId | Yes | ||
| title | Yes | ||
| interviewId | Yes | The organization interview ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations are all false/neutral and provide little safety or behavioral context, so the description carries the burden. It adds that the operation is a rename, implying the title changes, but it does not disclose side effects, authorization needs, uniqueness constraints, or whether the change is reversible. This is minimal beyond what the annotations already 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 a single terse sentence with no filler, and the core action is front-loaded. It is efficient but leans toward under-specification, leaving necessary context absent while remaining concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With three required parameters, no output schema, and weak annotations, the description is too thin for an agent to confidently construct a correct call. It lacks parameter mapping, side-effect notes, and any indication of what the response contains, so it is not complete enough for reliable 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 only 33% (only interviewId is described). The description does not explain the role of orgId, nor does it explicitly state that title is the new name for the interview. 'Rename' hints at the title's purpose but does not sufficiently compensate for the low 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 states a specific operation ('Rename') and resource ('organization landscape Clarity capture'), which is distinct from sibling operations like delete, finalize, or list. However, the term 'Clarity capture' is not exactly the schema's language ('organization interview'), introducing minor ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as finalizeClarityOrganizationInterview or deleteClarityOrganizationInterview. The only implicit signal is that this tool renames, but no exclusions, prerequisites, or alternative routing are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateClarityProcessUpdate Clarity ProcessAInspect
Update a Clarity process name, guidance, visibility, or completion status. Team Builders can edit names and guidance, only the creator or a team manager can change visibility, and completion requires a manager role.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Clarity process id | |
| name | No | New process name | |
| status | No | Mark a review-stage process complete | |
| visibility | No | Process visibility within the team | |
| customPrompt | No | Process-specific guidance, or null to clear it |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false and destructiveHint=false, so the description carries the burden of explaining mutation behavior. It adds value by disclosing that different fields are gated by different roles and that customPrompt can be nulled to clear guidance. It does not contradict the annotations: 'update' aligns with readOnlyHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste: the first states the action and scope, the second states the role constraints. The most decision-relevant information is front-loaded, and 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 5-param mutation with no output schema, the description covers what fields are updatable and who is authorized to update each, which is the key correctness risk. It omits the return value and error behavior for unauthorized attempts, but those are secondary for a tool whose main ambiguity is permission boundaries.
Complex tools with many parameters or behaviors need more documentation. Simple 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 earns more by mapping the plain-language field names ('guidance', 'visibility', 'completion status') to the actual parameters (customPrompt, visibility, status). This bridges the gap between user intent and schema vocabulary, and the null-to-clear guidance semantics in the schema is reinforced by the description's use of '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 opens with a specific verb+resource ('Update a Clarity process') and enumerates exactly which fields can be changed: name, guidance, visibility, and completion status. This maps cleanly to the schema parameters and gives an agent enough detail to distinguish it from nearby siblings like updateClarityGuidance or updateClarityProcessSharing, though it never names those alternatives explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence gives concrete role-based usage context: Team Builders can edit names and guidance, only the creator or a team manager can change visibility, and completion requires a manager role. This tells an agent when the tool is usable for a given caller, but it stops short of naming alternative tools to prefer for single-field updates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateClarityProcessLabelUpdate Clarity Process LabelCInspect
Update process tags for an organization.
| Name | Required | Description | Default |
|---|---|---|---|
| orgId | Yes | ||
| value | No | ||
| labelId | Yes | ||
| colorHue | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false, so the mutation nature is known. The description adds no behavioral context beyond that, such as whether this is a partial update, whether existing label values are overwritten, or whether authorization is required. 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 short sentence with no filler or redundant phrasing. It is appropriately concise, though that brevity contributes to the lack of semantic detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given four parameters, no schema descriptions, no output schema, and a mutation operation, the description is too thin. It does not communicate which fields are updatable, whether all fields are optional, or what the effect of calling it is on the referenced label. An agent would likely need to inspect sibling tools or schemas to use it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description needed to explain what value and colorHue mean and how they relate to updating a label. The description only says 'update process tags,' which does not map to the four parameters and leaves labelId, value, and colorHue semantics to the agent's inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 'Update' and names the resource as 'process tags,' which aligns with the tool name, but it is vague about what is actually being changed (label value, color, or something else). It does not distinguish this from related siblings like assignClarityProcessLabels or createClarityProcessLabel, which also operate on clarity process labels/tags.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance about when to use this tool versus alternatives such as createClarityProcessLabel, deleteClarityProcessLabel, or assignClarityProcessLabels. There are no exclusions, prerequisites, or context cues beyond the generic 'for an organization.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateClarityProcessLinkUpdate Clarity Process LinkAInspect
Update a process-to-process link in the organization's Clarity landscape when the caller can manage both endpoint teams.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Relationship type between the source process node and target process node | |
| orgId | Yes | ||
| state | No | Whether the link is suggested by Duvo or confirmed by a user | |
| confidence | No | Confidence score from 0 to 1, or null to clear it | |
| source_node_id | No | Replacement hierarchy node id for the source process | |
| target_node_id | No | Replacement hierarchy node id for the target process | |
| process_link_id | Yes | Unique process-link identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey that this is a mutating, non-idempotent operation. The description adds a meaningful authorization requirement ('when the caller can manage both endpoint teams'), which is exactly the kind of auth context that helps an agent avoid failed calls. No behavioral contradictions exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The entire description is one tight sentence that front-loads the core operation and appends the critical permission condition. 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?
Given the decent schema coverage, the mutation annotations, and the explicit caller-permission condition, the description is largely sufficient for an agent to invoke this tool correctly. It could be slightly stronger by noting whether updates are partial or full replacements, but the schema's 'Replacement' wording on node IDs partially covers this.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high at 86%, with parameters like type, state, confidence, source_node_id, and target_node_id already documented meaningfully. The description itself adds no parameter-level information, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Update') and resource ('process-to-process link') within a defined scope ('the organization's Clarity landscape'), clearly distinguishing it from sibling tools like createClarityProcessLink, deleteClarityProcessLink, and listClarityProcessLinks. The added authorization condition further narrows the tool's role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear usage prerequisite: the caller must be able to manage both endpoint teams. However, it does not explicitly state when not to use this tool or name alternatives such as creating or deleting a process link, so it stops short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateClarityProcessSharingUpdate Clarity Process SharingAInspect
Enable or disable sharing for a clarity process
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Clarity process ID. | |
| enabled | Yes | Whether public process sharing is enabled. | |
| proposalShareEnabled | No | Whether the automation proposal is included. Public sharing must already be enabled when only changing this setting. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate this is a mutating operation (readOnlyHint=false) and non-destructive. The description adds no extra behavioral context such as side effects of disabling sharing, permission requirements, or what happens to existing shared links. It essentially restates the action implied by the name and title.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It states the action and object directly and efficiently, leaving parameter details to the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema covers parameter semantics well, and this is a relatively simple mutation tool. Still, the description omits broader context such as prerequisites beyond the schema note and any side effects that disabling sharing may have, which an agent might need before invoking the tool confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes all three parameters, including the precondition that public sharing must already be enabled when only changing proposalShareEnabled. The description itself adds no parameter-level meaning, so it earns the baseline score for a fully covered schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Enable or disable') and a specific resource ('sharing for a clarity process'). This clearly distinguishes it from sibling tools that update other clarity process aspects such as labels, links, or general process settings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use case is implied by the action: call this when you want to change the sharing state of a clarity process. However, it does not explicitly mention alternatives like getClarityProcessSharing for reading current sharing settings, nor does it state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateClarityTeamSettingsUpdate Clarity Team SettingsCInspect
Update clarity team settings for financial calculations
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| industry | No | ||
| language | No | ||
| teamSize | No | ||
| companyName | No | ||
| annualRevenue | No | ||
| averageHourlyRate | No | ||
| emailReportsEnabled | No | ||
| emailReportIncludeSummary | No | ||
| emailReportIncludeCaptures | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations mark readOnlyHint=false and destructiveHint=false, which is consistent with the 'Update' wording, so there is no contradiction. However, the description adds no behavioral context beyond mutation: no patch-vs-replace semantics, side effects, validation behavior, or result details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with the verb and resource front-loaded and no wasted words. But it is concise to the point of under-specification, omitting substantive detail an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter mutation with no output schema and sparse annotations, one vague sentence is far from complete. It does not explain what the financial settings mean, how updates behave, who can call it, or what the response contains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 10%, and the tool description adds no parameter meaning. Nine parameters such as industry, language, teamSize, annualRevenue, averageHourlyRate, and email report flags are left semantically undocumented; 'financial calculations' only loosely hints at revenue/rate fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Update') and resource ('clarity team settings'), and 'for financial calculations' narrows the domain. It is distinguishable from the sibling getClarityTeamSettings, though it does not enumerate which settings are updatable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus the corresponding getter or related update tools. It does not mention that all parameters are optional, whether updates are partial patches, or any prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateConnectionUpdate ConnectionAInspect
Update an existing connection. For sensitive header values, sending an empty string keeps the existing value; send a new value to overwrite. Toggling shared moves the connection between personal and team-shared.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| shared | No | ||
| headers | No | ||
| server_url | No | ||
| auth_method | No | ||
| connection_id | Yes | Connection ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With only generic annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=false), the description adds meaningful behavioral detail: empty strings preserve sensitive header values and toggling `shared` moves between personal and team-shared. This goes beyond the schema and gives agents important update semantics, though it doesn't disclose all edge cases like how to remove a header.
Agents need to know what a tool does to the 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: the first states purpose, the second clarifies sensitive-header behavior, and the third clarifies the `shared` toggle. Every sentence adds necessary information, and the most important nuance is front-loaded immediately 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 mutating tool with six parameters and no output schema, the description covers the two most non-obvious behaviors (partial header updates and `shared` toggling) well. It is slightly incomplete in not stating whether omitted fields are left unchanged or how to clear sensitive header values, but overall it provides enough context for correct invocation in most cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 17%, so the description partially compensates by explaining the nuanced behavior of `headers` and `shared`. Other parameters like `name`, `server_url`, and `auth_method` rely on their self-explanatory names and enum/format constraints, but the description does not describe every parameter's update behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with 'Update an existing connection,' a specific verb and resource that clearly distinguishes this from createConnection, deleteConnection, getConnection, and listConnections. The word 'existing' reinforces the update semantics and makes the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies this is the tool to modify an already-created connection, which is the right context against the sibling create/delete/get/list tools. However, it does not explicitly state when not to use it or name an alternative tool, leaving some routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateCredentialUpdate credential by idAInspect
Update a login by id. At least one of password or otp_secret must remain set after the update. Editing a team-shared login or toggling sharing requires lead builder role.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| domain | No | ||
| shared | No | ||
| userId | Yes | ||
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| password | No | ||
| username | No | ||
| otp_secret | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as non-read-only and non-idempotent, and the description adds useful behavioral context: the password/otp invariant and the role requirement for shared-login edits. It also reveals that sharing can be toggled through this tool. The partial-update semantics are not disclosed, but the description 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 two sentences with no filler. The first sentence states the action and scope; the second packs in both a data invariant and a permission constraint. 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 an 8-parameter mutation with no output schema, the description is minimal but viable. It covers the core invariant and authorization requirement, yet leaves important gaps like what happens with omitted fields, what the response contains, and why userId is required. The annotations cover safety but not operational detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 13%, so the description must add meaning to parameters. It clarifies the password/otp_secret invariant and the behavior around the 'shared' field, but leaves required userId, id, domain, username, and nullability semantics implicit. The most important constraints are covered, but not enough to fully compensate for the low 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 states a specific verb ('Update') and resource ('a login') with an id scope, making the basic operation clear. It is distinguishable from createCredential and deleteCredential, though it doesn't explicitly name them or clarify the 'credential'/'login' terminology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 actionable usage constraints: at least one of password or otp_secret must remain set, and editing team-shared logins or toggling sharing requires lead builder role. This helps an agent decide whether a requested update is valid or permissioned, though it does not explicitly contrast with sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateEvalRubricUpdate Eval RubricADestructiveInspect
Edit a single Agent-specific evaluation rubric's title and/or description. The edit produces a NEW rubric (with a new id and slug) so previously scored Runs stay attributed to the original criterion; the response contains the new rubric.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Short, human-readable Pass/Fail rubric title. | |
| agentId | Yes | The agent's unique identifier (Assignment ID) | |
| rubricId | Yes | The custom rubric's unique identifier | |
| description | No | A 1-2 sentence Pass condition phrased as a question. | |
| selected_automation_revision_id | No | The automation revision this edit is being made at. Pass a draft and the edit is folded into that draft itself; pass the active revision and the edit lands on a draft branched from it. A historic revision is rejected — it cannot be activated from without an explicit rebase. A revision belonging to a different automation is ignored, and the edit targets the automation the addressed agent belongs to. Omit to target the automation's active revision. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by disclosing the critical non-obvious behavior: the edit creates a NEW rubric with a new id and slug, previously scored Runs remain attributed to the original criterion, and the response contains the new rubric. This is exactly the kind of behavioral nuance an agent needs and complements the destructiveHint annotation without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence. It front-loads the core action and then efficiently explains the most important consequences: new id/slug, preservation of past Run attribution, and the response containing the new rubric. 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?
Given the lack of an output schema, the description does a good job of noting that the response contains the new rubric and explaining the versioning side effect. Combined with the fully documented schema, the agent has enough context to invoke the tool. It falls slightly short of complete because it does not summarize the selected_automation_revision_id draft/active behavior, though the schema covers it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters are already well documented, including the complex selected_automation_revision_id behavior. The description mentions title and/or description at a high level but does not add new parameter meaning beyond what the schema already provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: edit a single Agent-specific evaluation rubric's title and/or description. It identifies the resource and the fields affected, so an agent can understand what the tool does. However, it does not explicitly differentiate this tool from related siblings such as createEvalRubric, replaceEvalRubrics, or updateCaseQueueEvalRubric.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 editing an existing rubric, but it gives no explicit guidance on when to use it versus creating, replacing, or deleting a rubric. No exclusions, prerequisites, or alternative tool mentions are provided, leaving the agent to infer appropriate usage from the tool name and context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateFileContentUpdate File ContentBIdempotentInspect
Update the content of a text file.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path of the file relative to the team's storage root | |
| content | Yes | New UTF-8 text content for the file | |
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, and the description aligns with those signals. However, the description adds no extra behavioral detail beyond the title, such as whether the entire file content is replaced or what the response contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one short, front-loaded sentence with no filler or redundancy. It is appropriately concise, though it is so terse that it mostly restates 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 write operation, the schema and annotations provide most of the essential context. However, there is no output schema or description of the return value, and the lack of usage guidance leaves cross-tool selection incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents all three parameters with 100% coverage, including path relative to the storage root, new UTF-8 content, and team_id semantics. The description adds no additional parameter meaning beyond the generic term 'content'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Update') and resource ('content of a text file'), so an agent can tell this operation modifies file contents. However, it does not differentiate this tool from sibling file tools like updateSkillFile or getFileContent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as updateSkillFile, getFileContent, or renameFile. The description only implies generic usage for updating text files, leaving tool selection largely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updatePulseDashboardUpdate Pulse DashboardAInspect
Update a Duvo Pulse dashboard's settings — rename it. Only the creator can update it.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| artifactId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and destructiveHint=false. The description adds meaningful behavioral context beyond those annotations: only the creator is permitted to update the dashboard, and the concrete mutation is a rename. It does not mention versioning or return behavior, but for a simple rename the permission constraint is the most important extra context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with zero filler. The action is front-loaded ('Update a Duvo Pulse dashboard's settings — rename it'), and the authorization note is a single clause. Every word contributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter rename with no output schema, the description plus schema constraints give an agent enough to call it correctly: what to do, on which object, and who is allowed. The only notable gaps are unstated versioning behavior and response format, but these are minor for such a simple operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden of explaining parameters. 'Rename it' maps title to the new dashboard name, and artifactId is reasonably inferable as the target dashboard identifier, but there is no explicit statement that artifactId identifies the dashboard to update or that title replaces the existing title. This is adequate but not thorough.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Update'), a specific resource ('a Duvo Pulse dashboard'), and narrows the action to renaming it rather than updating arbitrary settings. This separates it from create/delete/move/duplicate dashboard siblings, though it does not name an alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear use case: rename an existing Pulse dashboard. It also adds an explicit authorization condition, 'Only the creator can update it,' which helps an agent decide whether to attempt the call. It does not describe when to prefer a sibling tool like movePulseDashboard or createPulseDashboard, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateQueueUpdate QueueCInspect
Update a queue.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New queue name. Must be unique within the team. This route is refused once a team is on automation revisions, where a queue is instead renamed through its revision binding and uniqueness is checked per revision on activation. | |
| queue_id | Yes | The queue's unique identifier | |
| folder_id | No | New folder id, or null to move to the root. | |
| description | No | New description, or null to clear. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate this is a mutating, non-idempotent operation, but the description adds no behavioral context beyond that. It does not disclose what changes are applied, whether the operation replaces fields wholesale, any side effects, or permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short but not appropriately sized for a four-parameter mutation tool. It contains only a single tautological sentence and omits informative content that would help an agent invoke it correctly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is incomplete for the tool's complexity. With no output schema and sparse annotations, the burden falls on the description, but it fails to explain update semantics, alternatives, or operational constraints, leaving the agent to rely entirely on the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents each parameter thoroughly, including the special automation-revisions constraint on name. The description itself adds no parameter-level semantics, keeping this at the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Update a queue.' is a tautology—it restates the tool name and title without specifying what aspects of the queue can be updated, what the effect is, or how this differs from createQueue/deleteQueue/getQueue. It provides no detail beyond the verb and resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidance is provided. The description does not mention when to use this tool instead of createQueue, deleteQueue, or other queue-related tools, nor does it indicate prerequisites or constraints such as the automation revisions restriction described in the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateQueueJsonSchemaSettingsUpdate Queue Json Schema SettingsAInspect
Turn a queue's schema guard on or off, and freeze or unfreeze the schema document. A guarded queue with no schema yet asks its producing agent to declare one; a frozen schema refuses every change until it is unfrozen.
| Name | Required | Description | Default |
|---|---|---|---|
| frozen | No | Close the schema document to change. The queue must already have a schema. | |
| guarded | No | Require every new case on this queue to be typed. When on and the queue has no schema yet, the producing agent must declare one before it can add cases. | |
| queue_id | Yes | The queue's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations establish readOnly=false and destructive=false, so the mutation is already known. The description adds meaningful behavioral detail: a guarded queue with no schema requires the producing agent to declare one, and a frozen schema rejects all changes until unfrozen. This explains the state transitions the call triggers.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action, and no filler. The follow-up sentence clarifies the two key states in parallel. Every clause contributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-boolean mutation tool with well-described parameters and annotations, the description covers the core semantics and state effects. It does not mention return values or the relationship to replaceQueueJsonSchema, but these are not required for correct invocation. Slight gap in usage guidance keeps this below a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers all three parameters with descriptions (100% coverage), so the baseline is 3. The description mostly paraphrases the guarded and frozen parameter descriptions, adding only the phrasing 'asks its producing agent to declare one' and 'refuses every change until it is unfrozen.' It does not need to compensate for schema gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb phrase 'Turn a queue's schema guard on or off' and 'freeze or unfreeze the schema document,' identifying both the resource and the two toggles. This distinguishes it from schema-content operations like replaceQueueJsonSchema and attachQueueJsonSchema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 changing guard/frozen settings but does not explicitly say when to prefer it over related tools such as replaceQueueJsonSchema or attachQueueJsonSchema. There are no stated exclusions or alternative conditions. Usage is left to inference from the tool name and siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateQueueLabelUpdate Queue LabelBInspect
Update a label's key, value, or color. Renaming key/value affects every case assigned to this label.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | ||
| value | Yes | ||
| label_id | Yes | The label's unique identifier | |
| queue_id | Yes | The queue's unique identifier | |
| color_hue | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a mutating, non-idempotent, non-destructive operation. The description adds valuable behavioral context by disclosing that renaming key/value affects every case assigned to the label, which is a significant side effect an agent should know before 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?
Two concise sentences with no filler. The primary action is stated immediately, and the high-impact side effect is included in the second sentence. Every word contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main fields and the key side effect, but for a 5-parameter mutation tool with no output schema, it leaves gaps: no usage guidance, no explanation of key/value semantics, and no note on whether color updates behave differently from key/value updates. The schema and annotations fill some but not all of these gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 40%, with only label_id and queue_id documented. The description mentions key, value, and color, but does not explain what 'key' and 'value' mean in the queue-label context, nor does it clarify the semantics of color_hue beyond the schema's numeric range. This does not sufficiently compensate for the undocumented parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Update a label's key, value, or color'), identifies the specific attributes that can be changed, and implies the tool targets queue/case labels through the context of assigned cases. It does not explicitly differentiate from sibling updateClarityProcessLabel, but the queue_id parameter and name provide enough grounding.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus alternatives like createQueueLabel, deleteQueueLabel, or updateClarityProcessLabel. The description simply restates the operation without providing selection criteria, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateRevisionUpdate RevisionAInspect
Update a revision's configuration, name, description, or handover targets. Returns the updated revision.
| Name | Required | Description | Default |
|---|---|---|---|
| config | No | Build configuration object | |
| build_id | Yes | The build's unique identifier | |
| handoverTo | No | The single agent or code step to run after this one completes ("Handover to"). Null clears it; omit to leave it unchanged. Mutually exclusive with @-mention handovers in the AOP. | |
| revision_name | No | Optional user-defined name for this revision. Pass null to clear. | |
| handoverTargetIds | No | Agent IDs that this agent can hand over work to | |
| revision_description | No | Optional user-defined description for this revision. Pass null to clear. | |
| selected_automation_revision_id | No | The automation revision this edit is being made at. Pass a draft and the edit is folded into that draft itself; pass the active revision and the edit lands on a draft branched from it. A historic revision is rejected — it cannot be activated from without an explicit rebase. A revision belonging to a different automation is ignored, and the edit targets the automation the addressed agent belongs to. Omit to target the automation's active revision. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that the operation is not read-only and not destructive, so the description only needs to add context beyond that. It adds the return behavior, but it does not disclose subtleties like null-means-clear, draft branching via selected_automation_revision_id, or rejection of historic revisions; those details live in the parameter schema rather than the tool description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence with no filler: it leads with the action, names the affected fields, and ends with the return value. Every part 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 seven-parameter mutation with no output schema, the description is minimal but not misleading. The parameter schema carries most of the invocation detail, yet the high-level description does not mention the non-obvious active/draft/historic revision semantics or that several fields are null-to-clear; overall it is adequate but has clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and every parameter including handoverTo and selected_automation_revision_id has meaningful documentation. The description enumerates some updatable fields but adds no semantic value beyond what the schema already provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Update') with a clear resource ('revision') and names the fields affected: configuration, name, description, and handover targets. This distinguishes it from related operations like createRevision, getRevision, and promoteRevision, and it also states the return value ('Returns the updated 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?
The description implies this tool is for modifying an existing revision's metadata or handover setup, but it provides no explicit when-to-use guidance or exclusions. It does not mention that createRevision is for new revisions or that updateSkillRevision exists for skill revisions, so routing is left largely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateScheduleUpdate ScheduleAInspect
Update fields on an existing schedule. Only supplied fields are changed; omitted fields retain their current values. Owners may update their own schedules; team superadmins may update any schedule on agents in the current team.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | ||
| cron | No | ||
| time | No | ||
| enabled | No | ||
| agent_id | Yes | The agent's unique identifier | |
| timezone | No | ||
| frequency | No | ||
| recurring | No | ||
| schedule_id | Yes | The schedule's unique identifier | |
| day_of_month | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral detail beyond the annotations by explaining that only supplied fields are changed and omitted fields retain their values. It also discloses permission boundaries. It does not describe side effects or return behavior, but with annotations present, this is acceptable transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: the purpose comes first, followed by patch behavior, then authorization. Every sentence contributes essential information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core action, partial update behavior, and permissions, which is good for selection. However, there is no output schema and no mention of return values, and parameter details like cron or time format are absent, leaving some 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?
Schema description coverage is only 20%, and the description does not compensate by explaining what fields like cron, time, timezone, frequency, or day_of_month mean or what formats they require. The generic patch rule is useful, but the meaning of most parameters is left to schema names and enums 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 uses a specific verb and resource: 'Update fields on an existing schedule.' It clearly implies this is not the create or delete operation, but it does not explicitly name a sibling such as createSchedule or listAgentSchedules for differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides useful usage context by explaining partial-update semantics and who is authorized to update schedules. However, it does not explicitly state when to prefer this tool over alternatives or mention when the tool should not be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateSecretUpdate SecretAInspect
Update an env-var secret. Send values to replace all entries, or any of rename_keys, remove_keys, add_values for a non-destructive patch. Editing a team-shared secret or toggling sharing requires lead builder role.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| name | No | ||
| shared | No | ||
| values | No | ||
| add_values | No | ||
| remove_keys | No | ||
| rename_keys | No | ||
| service_slug | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint false, destructiveHint false), the description discloses that the operation can fully replace or partially patch entries, and that toggling sharing requires a special role. This adds useful behavioral context, though it does not cover idempotency, conflict handling, or return behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (two sentences) and logically structured: first the purpose, then the operational modes, then the role caveat. No 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?
While the description covers the main update modes and role requirement, it does not explain the behavior of name and service_slug parameters, nor does it address potential errors (e.g., conflicting values and add_values) or the return payload. Given the lack of an output schema, some gaps remain, but the description is sufficient for basic usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero description coverage, so the tool description is the only source of meaning. It explains the semantics of the key parameters (values, rename_keys, remove_keys, add_values) and clarifies that shared toggling has role implications. It omits explanations for id, name, and service_slug, but the core update parameters are well 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 states the action ('Update') and the resource ('env-var secret'), and distinguishes between full replacement and non-destructive patch modes. It also mentions a critical role requirement, 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 provides concrete guidance on how to use the tool ('send values to replace, or rename_keys/remove_keys/add_values for patch') and mentions the role requirement for team-shared secrets. It does not explicitly compare to alternatives like createSecret or deleteSecret, but the context of updating an existing secret is implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateSkillFileUpdate Skill FileAIdempotentInspect
Update the content of a file in a skill, overwriting the active revision in place — the previous content is not recoverable. Prefer the non-destructive flow when you can: createSkillRevision to open a draft, updateSkillRevisionFile to edit it, promoteSkillRevision to activate it. Only team skills can be edited.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Relative path to the file inside the skill, e.g. SKILL.md. | |
| content | Yes | New UTF-8 text content for the file. | |
| skill_id | Yes | Skill ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is transparent about irreversibility ('the previous content is not recoverable'), but the annotations declare destructiveHint=false, which directly contradicts that warning. Per the contradiction rule, this dimension must be scored 1, even though the prose alone would be strong.
Agents need to know what a tool does to the 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, each carrying essential information: the destructive update, the safer alternative workflow, and the team-skill constraint. No filler, and the most important caveat is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 3-parameter mutation with no output schema, the description covers the destructive consequence, the alternative flow, and the prerequisite. It loses one point only because the conflicting destructiveHint annotation makes the overall context less trustworthy and could mislead an agent despite the clear prose.
Complex tools with many parameters or behaviors need more documentation. Simple 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 schema already explains path, content, and skill_id with adequate descriptions. The tool description adds no parameter-specific semantics beyond the overall overwrite behavior, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action ('Update the content of a file in a skill'), the target resource, and the critical mode 'overwriting the active revision in place.' This clearly differentiates from siblings such as updateSkillRevisionFile and promoteSkillRevision, which operate on drafts or activation rather than live content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly advises preferring the non-destructive flow ('Prefer the non-destructive flow when you can') and enumerates the exact alternative sequence: createSkillRevision, updateSkillRevisionFile, promoteSkillRevision. It also states the constraint 'Only team skills can be edited,' so the agent knows when the tool is applicable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateSkillRevisionUpdate Skill RevisionAInspect
Rename a skill revision or change its description. Works for drafts, the active revision, and historic revisions.
| Name | Required | Description | Default |
|---|---|---|---|
| revision_name | No | Optional user-defined name for this revision. Pass null to clear. | |
| skill_revision_id | Yes | Skill revision ID. | |
| revision_description | No | Optional user-defined description for this revision. Pass null to clear. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey this is a mutating but non-destructive operation (readOnlyHint=false, destructiveHint=false). The description adds one genuinely useful behavioral fact — that even historic revisions are editable, which is atypical. However, it does not disclose potential side effects of editing the active revision (e.g., impact on running skills/agents) or whether partial updates patch versus overwrite.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler. The core action is front-loaded in the first sentence, and the second sentence adds lifecycle scope that earns its place. This is an appropriately sized definition for a simple three-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity tool with full schema coverage and no output schema, the description covers what it does and across which revision states it works. The remaining gaps — routing to the generic updateRevision sibling and clarifying side effects on the active revision — are relatively minor given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters including the 'Pass null to clear' semantics for both optional fields. The description's mention of renaming and changing description merely mirrors the schema without adding new parameter-level meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource (rename/change a skill revision) and the exact fields mutated (name, description), which clearly separates it from createSkillRevision, deleteSkillRevision, and promoteSkillRevision. However, it does not explicitly distinguish itself from the generic updateRevision sibling, which could overlap with this tool's 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 'Works for drafts, the active revision, and historic revisions' clause gives useful applicability context, implying the agent can use this tool on any revision lifecycle state. But it names no alternatives and gives no when-not-to-use guidance, especially against the similarly named updateRevision and updateSkillRevisionFile siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateSkillRevisionFileUpdate Skill Revision FileADestructiveIdempotentInspect
Write a text file into a skill revision. Writing into a draft leaves the active revision untouched until the draft is promoted; writing into the active revision changes what the skill runs immediately. Historic revisions are read-only: create a draft from one to edit it.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Relative path to the file inside the revision, e.g. SKILL.md. | |
| content | Yes | New UTF-8 text content for the file. | |
| skill_revision_id | Yes | Skill revision ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (write, destructive, idempotent), the description adds valuable behavioral context: the draft-versus-active distinction, the impact on the running skill, and the read-only constraint on historic revisions. This meaningfully explains side effects the annotations alone do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each carrying essential information. The main action is front-loaded, followed by the critical revision-state semantics and the read-only caveat. No filler or redundant restating of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully covers the most important contextual complexity of this tool: how revisions behave differently depending on draft/active/historic state. With no output schema, return values need not be described, and the 100% parameter coverage handles the remaining specifics.
Complex tools with many parameters or behaviors need more documentation. Simple 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 parameters are already documented. The description adds extra semantic value by implying that skill_revision_id must refer to a draft or active revision (not historic), and by framing path and content as file contents within a revision.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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: 'Write a text file into a skill revision.' It clearly distinguishes this file-level operation from sibling tools like updateSkillFile and updateSkillRevision by targeting files within a revision and explaining draft/active/historic 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 gives clear context for when to use the tool: writing to a draft leaves the active revision untouched, while writing to the active revision changes behavior immediately. It also tells users that historic revisions are read-only and advises creating a draft to edit them, but it does not name the specific alternative tool to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateSlackTriggerUpdate Slack Channel TriggerAInspect
Update a Slack channel trigger you own — repoint it at another channel, change which messages match, or pause and resume it with enabled. Only the supplied fields change. Resuming a paused trigger requires the Slack connection it runs off to still be available on the agent; changing the channel resets the trigger's seen-message state.
| Name | Required | Description | Default |
|---|---|---|---|
| enabled | No | Set to false to pause the trigger without deleting it, or true to resume it. Resuming requires the connection the trigger uses to still be available on the agent. | |
| channel_id | No | New Slack channel ID to watch. Omit to leave unchanged. | |
| is_private | No | Whether the channel is private. | |
| match_rule | No | Which channel messages fire the trigger: `{"kind":"all"}` for every message, or `{"kind":"contains","values":["invoice"]}` to match keywords. | |
| trigger_id | Yes | The Slack channel trigger's unique identifier | |
| channel_name | No | New Slack channel name, without the leading `#`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description meaningfully discloses behavioral details beyond the annotations: partial updates, the connection prerequisite for resuming a paused trigger, and the state-resetting side effect of changing channels. These are exactly the non-obvious behaviors an agent needs to know when invoking a mutation that is not annotated destructive.
Agents need to know what a tool does to the 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 carry the full meaning, with the core action front-loaded and supporting behavioral caveats placed right after. There is no redundant language, and 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 an update tool with six parameters, no output schema, and sparse annotations, the description covers the critical operational details: what can change, partial-update semantics, a prerequisite for resuming, and a side effect of channel changes. The schema fills in parameter-level detail, making this complete enough 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 input schema already documents all six parameters with 100% coverage, so the baseline is 3. The description adds value by connecting `enabled` to pause/resume semantics, noting the channel-change state reset, and reinforcing partial-update behavior. This is a modest but tangible contribution 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 and resource: 'Update a Slack channel trigger you own,' and enumerates the distinct update capabilities (repoint channel, change match rule, pause/resume). The ownership qualifier adds scope, and the specificity of 'Slack channel trigger' distinguishes it from related trigger tools like updateAgentCaseTrigger.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 clear this is for updating existing Slack channel triggers, not creating or deleting them, and stresses partial-update semantics via 'Only the supplied fields change.' It provides context for when to use it but does not explicitly name sibling alternatives like createAgentSlackTrigger or deleteSlackTrigger.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateTeamInviteUpdate Team InviteAInspect
Change the role on a pending team invitation. Only pending invitations can be updated — one already accepted or declined is rejected. Requires the Manager role or above on the invitation's own team.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ID of the pending invitation to update. | |
| role | Yes | New team role for the invitation. One of: team:owner, team:superadmin, team:admin (deprecated), team:manager, team:builder, team:member, team:clarity-member. You cannot assign a role above your own. | |
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal the operation is a non-read-only mutation. The description adds meaningful behavioral context beyond that: only pending invitations are accepted, accepted/declined invitations are rejected, and Manager role or above is required. This clarifies state constraints and permission needs that annotations do not express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences: the first states the primary purpose, and the second adds the key state and permission constraints. There is no filler, repetition of schema content, or extraneous detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with three well-documented parameters and no output schema, the description covers the critical conditions for successful invocation: pending state, role restriction, and authorization level. It could be slightly more complete by noting the success response or side effects, but the existing constraints are sufficient for 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?
Schema description coverage is 100%, so the schema already fully documents the id, role, and team_id parameters. The description adds a team-level permission requirement, but this is contextual rather than parameter-specific, so it does not significantly increase parameter understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action on a specific resource: 'Change the role on a pending team invitation.' It also distinguishes this from related sibling tools like deleteTeamInvite, createTeamInvite, and updateTeamMemberRole by focusing on pending invitations and role changes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 applies ('Only pending invitations can be updated') and explicitly excludes accepted or declined invitations. It also provides an authorization requirement ('Requires the Manager role or above'), but does not name sibling tools as alternatives, such as using updateTeamMemberRole after an invitation is accepted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateTeamMemberRoleUpdate Team Member RoleAInspect
Update an existing team member's role. Requires the Manager role or above; only an Owner may grant or remove the Owner role, and the last remaining Owner cannot be demoted. A member whose Owner role is inherited from the organization cannot be changed here.
| Name | Required | Description | Default |
|---|---|---|---|
| role | Yes | ||
| team_id | No | Duvo team UUID to operate on. API keys are pinned to a single team — omit this (it falls back to the key's team) or pass that same team; a different team is rejected. OAuth callers, who can span multiple teams, should pass the target team here. | |
| memberId | Yes | Member (user) ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, idempotentHint=false), the description discloses meaningful constraints: permission level required, Owner-role grant/removal restrictions, the last-Owner cannot be demoted rule, and the inherited-owner exclusion. This gives the agent important behavioral context not visible in the schema or 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 concise sentences front-load the action and then pack in the essential authorization and edge-case rules without repetition or filler. 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 permission-sensitive mutation, the description covers who may call it, owner-specific rules, and an inheritance edge case. It is slightly incomplete because the valid role values for the role argument are not enumerated, and no output/return expectations are stated, though the tool is otherwise well specified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents memberId and team_id, but the required role parameter has no description or enum. The description adds hierarchy constraints ('Manager role or above', 'Owner role'), which is useful, but it never lists the exact accepted role values, leaving the most important parameter under-specified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence, 'Update an existing team member's role,' names a specific action and resource, and 'existing' distinguishes it from invitation or creation tools. Among siblings like updateTeamInvite, removeTeamMember, and listTeamMembers, this clearly targets role mutation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 operating conditions: 'Requires the Manager role or above' and 'only an Owner may grant or remove the Owner role,' which tells the agent when the call is permitted. It does not explicitly name alternative tools or 'when not to use' beyond the inherited-owner case, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upgradeClarityProcessUpgrade Clarity ProcessAInspect
Move a v1 clarity process into v2. Rows with generated analysis are reset in place and regenerated; rows without analysis migrate in place when not generating.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral detail beyond the annotations by explaining that generated-analysis rows are reset in place and regenerated, while rows without analysis migrate in place. This gives the agent awareness of side effects that readOnlyHint and destructiveHint alone do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two sentences and front-loads the core operation ('Move a v1 clarity process into v2') before giving behavioral caveats. Every sentence contributes useful information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter mutation tool, this is reasonably complete, but some ambiguity remains: it does not clarify what 'when not generating' means, what the return value is, or what prerequisites must hold. Since there is no output schema, a bit more context would help the agent fully anticipate the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explicitly explain that the required 'id' parameter is the identifier of the v1 clarity process to upgrade. The meaning is inferable from the operation and parameter name, but the description does not directly compensate for the missing schema-level 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 a specific verb and resource: 'Move a v1 clarity process into v2,' which clearly identifies the operation as a version migration rather than a generic update or create. This distinguishes it from siblings like updateClarityProcess and duplicateClarityProcess, which do not mention v1-to-v2 migration.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 upgrading v1 processes to v2, giving the reader a clear context for use. However, it never explicitly states when not to use it or names alternatives, leaving the selection guidance mostly implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uploadSandboxFileUpload Sandbox FileAInspect
Upload a file directly to the sandbox. Maximum file size is 10MB. For larger files, use POST /v2/sandboxes/:sandbox_id/upload-urls.
| Name | Required | Description | Default |
|---|---|---|---|
| sandbox_id | Yes | The sandbox's unique identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals a key behavioral constraint—the 10MB file size limit—and directs users to the appropriate fallback when that limit is exceeded. While it lacks details on success responses, failure modes (e.g., duplicate names), or overwrite behavior, the annotations (readOnlyHint: false, destructiveHint: false) already cover the read/write and destructive nature. The description adds meaningful behavioral context beyond the annotations, meriting a high score.
Agents need to know what a tool does to the 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—two sentences—with the action stated first and the size constraint and fallback immediately following. Every word contributes value; there is no padding or redundancy. The front-loaded structure makes the critical information immediately accessible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 low complexity (one declared parameter, no output schema, no nested objects), the description is highly complete. It covers the primary action, the size threshold, and the alternative flow. The only missing element is the mechanism for providing the file content itself, but since the API endpoint is implied and the agent has sibling tools like createSandboxUploadUrl for context, the description adequately serves its purpose for most scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully documents the sandbox_id parameter with a clear description, achieving 100% coverage of declared inputs. The description adds the file size context (10MB) but fails to address a critical undisclosed parameter: how the actual file content is transmitted (e.g., request body, multipart form-data). Since the schema only lists sandbox_id, an agent would be left guessing how to attach the file, preventing the description from fully compensating for this gap. 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 exact action ('Upload a file directly to the sandbox'), identifying the specific verb (Upload), resource (file), and target (sandbox). It also distinguishes itself from sibling tools by explicitly defining a size limit (10MB) and referencing the alternate URL-based upload path, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool (for files up to 10MB) and when not to use it ('For larger files, use POST /v2/sandboxes/:sandbox_id/upload-urls'), providing a direct alternative. This gives the agent clear conditional logic for tool selection without needing to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upsertAgentTriggerUpsert Agent TriggerAIdempotentInspect
Create or update the authenticated user's trigger for an integration on an agent. The integration must already be connected to the agent (its OAuth connection set up in the Duvo dashboard). Set enabled: false to pause a trigger without deleting it.
| Name | Required | Description | Default |
|---|---|---|---|
| agentId | Yes | The agent's unique identifier | |
| enabled | No | Whether the trigger is active. Defaults to true. | |
| trigger_type | Yes | Trigger type within the integration (e.g. `email_received`). Discover valid values via the trigger types endpoint. | |
| filter_config | No | Integration-specific filter config (e.g. sender/subject filters). Shape comes from the integration's filter schema. | |
| integration_slug | Yes | Integration slug the trigger fires for (e.g. `gmail`, `outlook`, `linear-native`, `google-drive`). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses a prerequisite (integration must be connected) and a behavioral nuance (enabled: false pauses). These go beyond the annotations, which only state idempotent and non-destructive. It doesn't conflict with annotations and adds useful operational detail.
Agents need to know what a tool does to the 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, no fluff, and directly conveys the action, prerequisites, and a key behavioral option. It is well-structured and front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, return values need not be explained. The description covers prerequisites, action, and a key option. It could mention side effects of update (e.g., overwriting existing triggers) but that is implicit in 'upsert' and the idempotency hint. Overall sufficient 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% with all parameters having descriptions, so the baseline is 3. The tool description itself doesn't add parameter-specific details beyond what the schema already provides. The only extra context is the prerequisite about integration connection, which is not a parameter semantics issue.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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: 'Create or update the authenticated user's trigger for an integration on an agent.' It specifies the resource (trigger), the scope (integration on an agent), and implies idempotency via 'create or update'. This distinguishes it from sibling tools like createAgentCaseTrigger or updateSlackTrigger.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 important context: 'The integration must already be connected to the agent' and 'Set enabled: false to pause a trigger without deleting it.' It doesn't explicitly say when to prefer this over specific trigger tools, but the generic nature and idempotent hint make it clear this is for general integration triggers. Slightly more explicit comparison would elevate it.
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. Dates show when Glama detected each change.
10 tool updates
- Added
createQueueAggregation - Added
deleteQueueAggregation - Added
evaluateQueueAggregation - Changed
getNotificationBatch1 field changed- changed
Input schema / properties / type / enumPrevious value: -[ - "connection_broken", - "case_failed", - "critical_case_issue", - "case_issue", - "critical_eval_issue", - "eval_issue", - "job_issue", - "job_done", - "background_job", - "schedule_issue" -]New value: +[ + "connection_broken", + "case_failed", + "critical_case_issue", + "case_issue", + "critical_eval_issue", + "eval_issue", + "job_issue", + "job_done", + "background_job", + "schedule_issue", + "config_proposal" +]
- Changed
getNotificationFeed1 field changed- changed
Input schema / properties / type / enumPrevious value: -[ - "connection_broken", - "case_failed", - "critical_case_issue", - "case_issue", - "critical_eval_issue", - "eval_issue", - "job_issue", - "job_done", - "background_job", - "schedule_issue" -]New value: +[ + "connection_broken", + "case_failed", + "critical_case_issue", + "case_issue", + "critical_eval_issue", + "eval_issue", + "job_issue", + "job_done", + "background_job", + "schedule_issue", + "config_proposal" +]
- Added
getQueueAggregationResult - Changed
listNotifications2 fields changed- changed
Input schema / properties / type / descriptionPrevious value: -"Only return notifications of this type. One of: connection_broken, case_failed, critical_case_issue, case_issue, critical_eval_issue, eval_issue, job_issue, job_done, background_job, schedule_issue."New value: +"Only return notifications of this type. One of: connection_broken, case_failed, critical_case_issue, case_issue, critical_eval_issue, eval_issue, job_issue, job_done, background_job, schedule_issue, config_proposal." - changed
Input schema / properties / type / enumPrevious value: -[ - "connection_broken", - "case_failed", - "critical_case_issue", - "case_issue", - "critical_eval_issue", - "eval_issue", - "job_issue", - "job_done", - "background_job", - "schedule_issue" -]New value: +[ + "connection_broken", + "case_failed", + "critical_case_issue", + "case_issue", + "critical_eval_issue", + "eval_issue", + "job_issue", + "job_done", + "background_job", + "schedule_issue", + "config_proposal" +]
- Added
listQueueAggregations - Changed
markNotificationBatchRead2 fields changed- changed
Input schema / properties / types / items / enumPrevious value: -[ - "connection_broken", - "case_failed", - "critical_case_issue", - "case_issue", - "critical_eval_issue", - "eval_issue", - "job_issue", - "job_done", - "background_job", - "schedule_issue" -]New value: +[ + "connection_broken", + "case_failed", + "critical_case_issue", + "case_issue", + "critical_eval_issue", + "eval_issue", + "job_issue", + "job_done", + "background_job", + "schedule_issue", + "config_proposal" +] - changed
Input schema / properties / types / maxItemsPrevious value: -10New value: +11
- Added
refreshQueueAggregation
30 tool updates
- Changed
assignClarityExtraCaptureRequest1 field changed- changed
Input schema / properties / transformation_proposal_id / descriptionPrevious value: -"The transformation proposal id"New value: +"The automation proposal id"
- Added
attachQueueJsonSchema - Changed
buildClarityAutomation1 field changed- changed
Input schema / properties / transformation_proposal_id / descriptionPrevious value: -"Transformation-proposal snapshot to build the automation from. Defaults to the process's live proposal."New value: +"Automation-proposal snapshot to build the automation from. Defaults to the process's live proposal."
- Changed
createAgent1 field changed- changed
Input schema / properties / build / properties / config / properties / data / properties / subAgents / descriptionPrevious value: -"IDs of other agents (in the same team) to expose to this agent as Claude Code subagents. Each sub-agent runs with its own AOP and connections; the parent can delegate to them via the Agent tool."New value: +"Retired — Sub-Assignments was removed. Accepted for backwards compatibility and ignored."
- Added
createAutomation - Changed
createClarityGuidance1 field changed- changed
Input schema / properties / content / descriptionPrevious value: -"Transformation guidance to add to the process."New value: +"Automation guidance to add to the process."
- Added
createQueueJsonSchema - Changed
createRevision2 fields changed- changed
Input schema / properties / config / anyOfPrevious value: -[ - { - "properties": { - "data": { - "description": "Agent configuration payload", - "properties": { - "files": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": [], - "description": "Team files that should be available to the agent, each given as the relative file path returned in the `path` field of `GET /v2/teams/{teamId}/files` (for example `report.md` or `folder/doc.md`) — not the `id` field, which is a GCS object identifier." - }, - "input": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "properties": { - "content": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "anyOf": [ - { - "properties": { - "text": { - "type": "string" - }, - "type": { - "const": "input_text", - "type": "string" - } - }, - "required": [ - "type", - "text" - ], - "type": "object" - }, - { - "properties": { - "detail": { - "anyOf": [ - { - "enum": [ - "low", - "high", - "auto" - ], - "type": "string" - }, - { - "type": "null" - } - ] - }, - "file_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "type": { - "const": "input_image", - "type": "string" - }, - "url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "type" - ], - "type": "object" - }, - { - "properties": { - "file_id": { - "type": "string" - }, - "type": { - "const": "input_file", - "type": "string" - } - }, - "required": [ - "type", - "file_id" - ], - "type": "object" - } - ] - }, - "type": "array" - } - ] - }, - "role": { - "enum": [ - "system", - "user", - "assistant" - ], - "type": "string" - }, - "type": { - "anyOf": [ - { - "const": "message", - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "role", - "content" - ], - "type": "object" - }, - "type": "array" - } - ], - "description": "Initial agent instructions — either a single system prompt string or a list of structured messages" - }, - "models": { - "description": "Model configuration for each capability the agent uses", - "properties": { - "agent": { - "description": "Primary agent model configuration", - "properties": { - "model": { - "description": "Model identifier used for the primary agent loop (Claude, or an OSS model when the team's oss_models flag — or oss_models_public for the public subset — is enabled)", - "enum": [ - "claude-haiku-4-5-20251001", - "claude-sonnet-5", - "claude-sonnet-5[1m]", - "claude-opus-5", - "claude-opus-5[1m]", - "kimi-k3", - "kimi-k3-duvo", - "glm-5.2", - "glm-5.3-flash", - "deepseek-v4-flash", - "minimax-m3", - "qwen3.6-27b", - "d1-max", - "duvo-1-max", - "duvo-1-max-sonnet-1m", - "duvo-1-max-sonnet-4.5", - "duvo-1-max-sonnet-4.5-1m", - "duvo-1-max-opus", - "duvo-1-max-opus-4.5", - "gpt-4.1", - "gpt-4o", - "gpt-4o-mini", - "gpt-5", - "gpt-5.1", - "claude-sonnet-4-20250514", - "claude-sonnet-4-20250514[1m]", - "claude-sonnet-4-5-20250929", - "claude-sonnet-4-5-20250929[1m]", - "claude-sonnet-4-6", - "claude-sonnet-4-6[1m]", - "claude-opus-4-1-20250805", - "claude-opus-4-5-20251101", - "claude-opus-4-6", - "claude-opus-4-6[1m]", - "claude-opus-4-7", - "claude-opus-4-7[1m]", - "claude-opus-4-8", - "claude-opus-4-8[1m]" - ], - "type": "string", - "x-extensible-enum": [ - "claude-haiku-4-5-20251001", - "claude-sonnet-5", - "claude-sonnet-5[1m]", - "claude-opus-5", - "claude-opus-5[1m]", - "kimi-k3", - "kimi-k3-duvo", - "glm-5.2", - "glm-5.3-flash", - "deepseek-v4-flash", - "minimax-m3", - "qwen3.6-27b", - "d1-max", - "duvo-1-max", - "duvo-1-max-sonnet-1m", - "duvo-1-max-sonnet-4.5", - "duvo-1-max-sonnet-4.5-1m", - "duvo-1-max-opus", - "duvo-1-max-opus-4.5", - "gpt-4.1", - "gpt-4o", - "gpt-4o-mini", - "gpt-5", - "gpt-5.1", - "claude-sonnet-4-20250514", - "claude-sonnet-4-20250514[1m]", - "claude-sonnet-4-5-20250929", - "claude-sonnet-4-5-20250929[1m]", - "claude-sonnet-4-6", - "claude-sonnet-4-6[1m]", - "claude-opus-4-1-20250805", - "claude-opus-4-5-20251101", - "claude-opus-4-6", - "claude-opus-4-6[1m]", - "claude-opus-4-7", - "claude-opus-4-7[1m]", - "claude-opus-4-8", - "claude-opus-4-8[1m]" - ] - } - }, - "required": [ - "model" - ], - "type": "object" - }, - "browsing": { - "description": "Browsing/computer-use model configuration", - "properties": { - "model": { - "description": "Model identifier for the browsing provider", - "enum": [ - "gemini-2.5-pro", - "gemini-2.5-flash", - "gemini-3-pro-preview", - "claude-haiku-4-5", - "claude-sonnet-4-5", - "claude-opus-4-1" - ], - "type": "string" - }, - "provider": { - "description": "Provider backing the browsing/computer-use model", - "enum": [ - "google", - "anthropic" - ], - "type": "string" - } - }, - "required": [ - "provider", - "model" - ], - "type": "object" - } - }, - "required": [ - "agent", - "browsing" - ], - "type": "object" - }, - "options": { - "additionalProperties": {}, - "description": "Optional runtime options controlling how the agent executes", - "properties": { - "benchmarkExpectedOutcomes": { - "description": "Expected outcomes used when running benchmark scenarios", - "items": { - "properties": { - "criteria": { - "description": "Pass/fail criteria used to evaluate the outcome", - "type": "string" - }, - "description": { - "description": "Human-readable description of the expected outcome", - "type": "string" - } - }, - "required": [ - "description", - "criteria" - ], - "type": "object" - }, - "type": "array" - }, - "browserProvider": { - "description": "Browser infrastructure provider", - "enum": [ - "browserbase", - "browser-use" - ], - "type": "string" - }, - "evaluationSchemaId": { - "description": "ID of the evaluation schema to apply to runs of this agent", - "type": "string" - }, - "supervisedMode": { - "description": "Run the agent under Duvo's permission classifier: every tool call is classified as allow/deny/ask, with 'ask' routed to human-in-the-loop approval. Mutually exclusive with browsing and computer-use connections.", - "type": "boolean" - } - }, - "type": "object" - }, - "plugins": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": [], - "description": "Plugins to load — either a built-in plugin name (e.g. \"code-review\") or a GitHub URL (e.g. \"https://github.com/owner/repo\")" - }, - "skills": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": [], - "description": "IDs of skills (team or system) that should be available to the agent" - }, - "subAgents": { - "anyOf": [ - { - "items": { - "format": "uuid", - "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$", - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": [], - "description": "IDs of other agents (in the same team) to expose to this agent as Claude Code subagents. Each sub-agent runs with its own AOP and connections; the parent can delegate to them via the Agent tool." - } - }, - "required": [ - "models", - "input" - ], - "type": "object" - }, - "version": { - "const": "v2", - "description": "Schema version discriminator — must be \"v2\" for the current schema", - "type": "string" - } - }, - "required": [ - "version", - "data" - ], - "type": "object" - }, - { - "properties": { - "data": { - "description": "Code step configuration payload", - "properties": { - "files": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": [], - "description": "Team file paths this step can read at run time" - }, - "language": { - "description": "Language the step's program is written in", - "enum": [ - "python" - ], - "type": "string" - }, - "source": { - "description": "Where the step's program comes from", - "oneOf": [ - { - "properties": { - "code": { - "description": "Program held in the build config. Written to `main.py` and run with `python main.py`.", - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "inline", - "type": "string" - } - }, - "required": [ - "kind", - "code" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "files", - "type": "string" - }, - "startCommand": { - "description": "Command run from the root of the step's file system, e.g. \"python main.py\".", - "maxLength": 2000, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "startCommand" - ], - "type": "object" - } - ] - }, - "timeoutMs": { - "default": 600000, - "description": "Wall-clock budget for one execution of the step", - "exclusiveMinimum": 0, - "maximum": 3600000, - "type": "integer" - } - }, - "required": [ - "language", - "source" - ], - "type": "object" - }, - "version": { - "const": "v1", - "description": "Schema version discriminator — must be \"v1\" for the current code-step schema", - "type": "string" - } - }, - "required": [ - "version", - "data" - ], - "type": "object" - } -]New value: +[ + { + "properties": { + "data": { + "description": "Agent configuration payload", + "properties": { + "files": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": [], + "description": "Team files that should be available to the agent, each given as the relative file path returned in the `path` field of `GET /v2/teams/{teamId}/files` (for example `report.md` or `folder/doc.md`) — not the `id` field, which is a GCS object identifier." + }, + "input": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "properties": { + "content": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "anyOf": [ + { + "properties": { + "text": { + "type": "string" + }, + "type": { + "const": "input_text", + "type": "string" + } + }, + "required": [ + "type", + "text" + ], + "type": "object" + }, + { + "properties": { + "detail": { + "anyOf": [ + { + "enum": [ + "low", + "high", + "auto" + ], + "type": "string" + }, + { + "type": "null" + } + ] + }, + "file_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "type": { + "const": "input_image", + "type": "string" + }, + "url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "type" + ], + "type": "object" + }, + { + "properties": { + "file_id": { + "type": "string" + }, + "type": { + "const": "input_file", + "type": "string" + } + }, + "required": [ + "type", + "file_id" + ], + "type": "object" + } + ] + }, + "type": "array" + } + ] + }, + "role": { + "enum": [ + "system", + "user", + "assistant" + ], + "type": "string" + }, + "type": { + "anyOf": [ + { + "const": "message", + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "role", + "content" + ], + "type": "object" + }, + "type": "array" + } + ], + "description": "Initial agent instructions — either a single system prompt string or a list of structured messages" + }, + "models": { + "description": "Model configuration for each capability the agent uses", + "properties": { + "agent": { + "description": "Primary agent model configuration", + "properties": { + "model": { + "description": "Model identifier used for the primary agent loop (Claude, or an OSS model when the team's oss_models flag — or oss_models_public for the public subset — is enabled)", + "enum": [ + "claude-haiku-4-5-20251001", + "claude-sonnet-5", + "claude-sonnet-5[1m]", + "claude-opus-5", + "claude-opus-5[1m]", + "kimi-k3", + "kimi-k3-duvo", + "glm-5.2", + "glm-5.3-flash", + "deepseek-v4-flash", + "minimax-m3", + "qwen3.6-27b", + "d1-max", + "duvo-1-max", + "duvo-1-max-sonnet-1m", + "duvo-1-max-sonnet-4.5", + "duvo-1-max-sonnet-4.5-1m", + "duvo-1-max-opus", + "duvo-1-max-opus-4.5", + "gpt-4.1", + "gpt-4o", + "gpt-4o-mini", + "gpt-5", + "gpt-5.1", + "claude-sonnet-4-20250514", + "claude-sonnet-4-20250514[1m]", + "claude-sonnet-4-5-20250929", + "claude-sonnet-4-5-20250929[1m]", + "claude-sonnet-4-6", + "claude-sonnet-4-6[1m]", + "claude-opus-4-1-20250805", + "claude-opus-4-5-20251101", + "claude-opus-4-6", + "claude-opus-4-6[1m]", + "claude-opus-4-7", + "claude-opus-4-7[1m]", + "claude-opus-4-8", + "claude-opus-4-8[1m]" + ], + "type": "string", + "x-extensible-enum": [ + "claude-haiku-4-5-20251001", + "claude-sonnet-5", + "claude-sonnet-5[1m]", + "claude-opus-5", + "claude-opus-5[1m]", + "kimi-k3", + "kimi-k3-duvo", + "glm-5.2", + "glm-5.3-flash", + "deepseek-v4-flash", + "minimax-m3", + "qwen3.6-27b", + "d1-max", + "duvo-1-max", + "duvo-1-max-sonnet-1m", + "duvo-1-max-sonnet-4.5", + "duvo-1-max-sonnet-4.5-1m", + "duvo-1-max-opus", + "duvo-1-max-opus-4.5", + "gpt-4.1", + "gpt-4o", + "gpt-4o-mini", + "gpt-5", + "gpt-5.1", + "claude-sonnet-4-20250514", + "claude-sonnet-4-20250514[1m]", + "claude-sonnet-4-5-20250929", + "claude-sonnet-4-5-20250929[1m]", + "claude-sonnet-4-6", + "claude-sonnet-4-6[1m]", + "claude-opus-4-1-20250805", + "claude-opus-4-5-20251101", + "claude-opus-4-6", + "claude-opus-4-6[1m]", + "claude-opus-4-7", + "claude-opus-4-7[1m]", + "claude-opus-4-8", + "claude-opus-4-8[1m]" + ] + } + }, + "required": [ + "model" + ], + "type": "object" + }, + "browsing": { + "description": "Browsing/computer-use model configuration", + "properties": { + "model": { + "description": "Model identifier for the browsing provider", + "enum": [ + "gemini-2.5-pro", + "gemini-2.5-flash", + "gemini-3-pro-preview", + "claude-haiku-4-5", + "claude-sonnet-4-5", + "claude-opus-4-1" + ], + "type": "string" + }, + "provider": { + "description": "Provider backing the browsing/computer-use model", + "enum": [ + "google", + "anthropic" + ], + "type": "string" + } + }, + "required": [ + "provider", + "model" + ], + "type": "object" + } + }, + "required": [ + "agent", + "browsing" + ], + "type": "object" + }, + "options": { + "additionalProperties": {}, + "description": "Optional runtime options controlling how the agent executes", + "properties": { + "benchmarkExpectedOutcomes": { + "description": "Expected outcomes used when running benchmark scenarios", + "items": { + "properties": { + "criteria": { + "description": "Pass/fail criteria used to evaluate the outcome", + "type": "string" + }, + "description": { + "description": "Human-readable description of the expected outcome", + "type": "string" + } + }, + "required": [ + "description", + "criteria" + ], + "type": "object" + }, + "type": "array" + }, + "browserProvider": { + "description": "Browser infrastructure provider", + "enum": [ + "browserbase", + "browser-use" + ], + "type": "string" + }, + "evaluationSchemaId": { + "description": "ID of the evaluation schema to apply to runs of this agent", + "type": "string" + }, + "supervisedMode": { + "description": "Run the agent under Duvo's permission classifier: every tool call is classified as allow/deny/ask, with 'ask' routed to human-in-the-loop approval. Mutually exclusive with browsing and computer-use connections.", + "type": "boolean" + } + }, + "type": "object" + }, + "plugins": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": [], + "description": "Plugins to load — either a built-in plugin name (e.g. \"code-review\") or a GitHub URL (e.g. \"https://github.com/owner/repo\")" + }, + "skills": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": [], + "description": "IDs of skills (team or system) that should be available to the agent" + }, + "subAgents": { + "anyOf": [ + { + "items": { + "format": "uuid", + "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$", + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": [], + "description": "Retired — Sub-Assignments was removed. Accepted for backwards compatibility and ignored." + } + }, + "required": [ + "models", + "input" + ], + "type": "object" + }, + "version": { + "const": "v2", + "description": "Schema version discriminator — must be \"v2\" for the current schema", + "type": "string" + } + }, + "required": [ + "version", + "data" + ], + "type": "object" + }, + { + "properties": { + "data": { + "description": "Code step configuration payload", + "properties": { + "files": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": [], + "description": "Team file paths this step can read at run time" + }, + "language": { + "description": "Language the step's program is written in", + "enum": [ + "python" + ], + "type": "string" + }, + "source": { + "description": "Where the step's program comes from", + "oneOf": [ + { + "properties": { + "code": { + "description": "Program held in the build config. Written to `main.py` and run with `python main.py`.", + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "inline", + "type": "string" + } + }, + "required": [ + "kind", + "code" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "files", + "type": "string" + }, + "startCommand": { + "description": "Command run from the root of the step's file system, e.g. \"python main.py\".", + "maxLength": 2000, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "startCommand" + ], + "type": "object" + } + ] + }, + "timeoutMs": { + "default": 600000, + "description": "Wall-clock budget for one execution of the step", + "exclusiveMinimum": 0, + "maximum": 3600000, + "type": "integer" + } + }, + "required": [ + "language", + "source" + ], + "type": "object" + }, + "version": { + "const": "v1", + "description": "Schema version discriminator — must be \"v1\" for the current code-step schema", + "type": "string" + } + }, + "required": [ + "version", + "data" + ], + "type": "object" + } +] - added
Input schema / properties / handover_toAdded value: +{ + "anyOf": [ + { + "format": "uuid", + "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The single agent or code step to run after this one completes (\"Handover to\"). Mutually exclusive with handover_target_ids." +}
- Added
deleteAutomation - Added
detachQueueJsonSchema - Added
exportCases - Changed
generateClarityProcessSnapshot4 fields changed- changed
Input schema / properties / custom_guidance / descriptionPrevious value: -"Transformation proposals only: optional freeform guidance for this generation. Used as high-priority design guidance, not source-of-truth evidence."New value: +"Automation proposals only: optional freeform guidance for this generation. Used as high-priority design guidance, not source-of-truth evidence." - changed
Input schema / properties / regenerate_from / descriptionPrevious value: -"Transformation proposals only: id of a prior proposal snapshot to refine. When supplied, runs the regenerate pipeline using that proposal's current-process snapshot as the anchor and the extra captures collected since."New value: +"Automation proposals only: id of a prior proposal snapshot to refine. When supplied, runs the regenerate pipeline using that proposal's current-process snapshot as the anchor and the extra captures collected since." - changed
Input schema / properties / source_snapshot_id / descriptionPrevious value: -"Transformation proposals only: id of the current-process snapshot to anchor the new proposal to. Defaults to the latest snapshot for the process."New value: +"Automation proposals only: id of the current-process snapshot to anchor the new proposal to. Defaults to the latest snapshot for the process." - changed
Input schema / properties / transformation_aggressiveness / descriptionPrevious value: -"Transformation proposals only: controls how much the generated proposal should change the current process structure."New value: +"Automation proposals only: controls how much the generated proposal should change the current process structure."
- Added
getAutomation - Added
getAutomationCurrent - Added
getAutomationCurrentFlow - Added
getAutomationTabs - Changed
getNotificationBatch1 field changed- changed
Input schema / properties / type / enumPrevious value: -[ - "connection_broken", - "critical_eval_issue", - "eval_issue", - "job_issue", - "job_done", - "background_job", - "schedule_issue" -]New value: +[ + "connection_broken", + "case_failed", + "critical_case_issue", + "case_issue", + "critical_eval_issue", + "eval_issue", + "job_issue", + "job_done", + "background_job", + "schedule_issue" +]
- Changed
getNotificationFeed1 field changed- changed
Input schema / properties / type / enumPrevious value: -[ - "connection_broken", - "critical_eval_issue", - "eval_issue", - "job_issue", - "job_done", - "background_job", - "schedule_issue" -]New value: +[ + "connection_broken", + "case_failed", + "critical_case_issue", + "case_issue", + "critical_eval_issue", + "eval_issue", + "job_issue", + "job_done", + "background_job", + "schedule_issue" +]
- Added
getQueueJsonSchema - Removed
initiateClarityPhoneInterview - Added
listAutomations - Changed
listClarityExtraCaptureRequests1 field changed- changed
Input schema / properties / transformation_proposal_id / descriptionPrevious value: -"The transformation proposal id"New value: +"The automation proposal id"
- Changed
listNotifications2 fields changed- changed
Input schema / properties / type / descriptionPrevious value: -"Only return notifications of this type. One of: connection_broken, critical_eval_issue, eval_issue, job_issue, job_done, background_job, schedule_issue."New value: +"Only return notifications of this type. One of: connection_broken, case_failed, critical_case_issue, case_issue, critical_eval_issue, eval_issue, job_issue, job_done, background_job, schedule_issue." - changed
Input schema / properties / type / enumPrevious value: -[ - "connection_broken", - "critical_eval_issue", - "eval_issue", - "job_issue", - "job_done", - "background_job", - "schedule_issue" -]New value: +[ + "connection_broken", + "case_failed", + "critical_case_issue", + "case_issue", + "critical_eval_issue", + "eval_issue", + "job_issue", + "job_done", + "background_job", + "schedule_issue" +]
- Changed
markNotificationBatchRead2 fields changed- changed
Input schema / properties / types / items / enumPrevious value: -[ - "connection_broken", - "critical_eval_issue", - "eval_issue", - "job_issue", - "job_done", - "background_job", - "schedule_issue" -]New value: +[ + "connection_broken", + "case_failed", + "critical_case_issue", + "case_issue", + "critical_eval_issue", + "eval_issue", + "job_issue", + "job_done", + "background_job", + "schedule_issue" +] - changed
Input schema / properties / types / maxItemsPrevious value: -7New value: +10
- Added
replaceQueueJsonSchema - Added
updateAutomation - Changed
updateClarityGuidance1 field changed- changed
Input schema / properties / content / descriptionPrevious value: -"Replacement transformation guidance for the process."New value: +"Replacement automation guidance for the process."
- Changed
updateClarityProcessSharing1 field changed- changed
Input schema / properties / proposalShareEnabled / descriptionPrevious value: -"Whether the transformation proposal is included. Public sharing must already be enabled when only changing this setting."New value: +"Whether the automation proposal is included. Public sharing must already be enabled when only changing this setting."
- Added
updateQueueJsonSchemaSettings - Changed
updateRevision1 field changed- added
Input schema / properties / handoverToAdded value: +{ + "anyOf": [ + { + "format": "uuid", + "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The single agent or code step to run after this one completes (\"Handover to\"). Null clears it; omit to leave it unchanged. Mutually exclusive with @-mention handovers in the AOP." +}
1 tool update
- Changed
createClarityDocumentUploadUrl1 field changed- changed
Input schema / properties / contentType / enumPrevious value: -[ - "application/pdf", - "text/plain", - "text/markdown", - "application/xml" -]New value: +[ + "application/pdf", + "text/plain", + "text/markdown", + "application/xml", + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", + "text/csv", + "application/vnd.ms-excel" +]
2 tool updates
- Changed
createAgent3 fields changed- changed
Input schema / properties / build / descriptionPrevious value: -"Optional inline build. When present, a first build is created alongside the agent."New value: +"Optional inline build. When present, a first build is created alongside the agent. Only valid for an agent step." - changed
Input schema / properties / build / properties / config / descriptionPrevious value: -"Build configuration (latest schema version only; legacy v1 configs are not accepted)"New value: +"Build configuration (latest schema version only; legacy v1 configs are not accepted). Agent steps only — a code step's first build is created via `POST /v2/agents/{agent_id}/revisions`, which accepts a code-step config." - added
Input schema / properties / typeAdded value: +{ + "default": "agent", + "description": "Flavour of the step to create. Fixed at creation — it selects the config family every build of this step must use, and the two cannot be mixed.", + "enum": [ + "agent", + "code" + ], + "type": "string" +}
- Changed
createRevision5 fields changed- added
Input schema / properties / config / anyOfAdded value: +[ + { + "properties": { + "data": { + "description": "Agent configuration payload", + "properties": { + "files": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": [], + "description": "Team files that should be available to the agent, each given as the relative file path returned in the `path` field of `GET /v2/teams/{teamId}/files` (for example `report.md` or `folder/doc.md`) — not the `id` field, which is a GCS object identifier." + }, + "input": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "properties": { + "content": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "anyOf": [ + { + "properties": { + "text": { + "type": "string" + }, + "type": { + "const": "input_text", + "type": "string" + } + }, + "required": [ + "type", + "text" + ], + "type": "object" + }, + { + "properties": { + "detail": { + "anyOf": [ + { + "enum": [ + "low", + "high", + "auto" + ], + "type": "string" + }, + { + "type": "null" + } + ] + }, + "file_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "type": { + "const": "input_image", + "type": "string" + }, + "url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "type" + ], + "type": "object" + }, + { + "properties": { + "file_id": { + "type": "string" + }, + "type": { + "const": "input_file", + "type": "string" + } + }, + "required": [ + "type", + "file_id" + ], + "type": "object" + } + ] + }, + "type": "array" + } + ] + }, + "role": { + "enum": [ + "system", + "user", + "assistant" + ], + "type": "string" + }, + "type": { + "anyOf": [ + { + "const": "message", + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "role", + "content" + ], + "type": "object" + }, + "type": "array" + } + ], + "description": "Initial agent instructions — either a single system prompt string or a list of structured messages" + }, + "models": { + "description": "Model configuration for each capability the agent uses", + "properties": { + "agent": { + "description": "Primary agent model configuration", + "properties": { + "model": { + "description": "Model identifier used for the primary agent loop (Claude, or an OSS model when the team's oss_models flag — or oss_models_public for the public subset — is enabled)", + "enum": [ + "claude-haiku-4-5-20251001", + "claude-sonnet-5", + "claude-sonnet-5[1m]", + "claude-opus-5", + "claude-opus-5[1m]", + "kimi-k3", + "kimi-k3-duvo", + "glm-5.2", + "glm-5.3-flash", + "deepseek-v4-flash", + "minimax-m3", + "qwen3.6-27b", + "d1-max", + "duvo-1-max", + "duvo-1-max-sonnet-1m", + "duvo-1-max-sonnet-4.5", + "duvo-1-max-sonnet-4.5-1m", + "duvo-1-max-opus", + "duvo-1-max-opus-4.5", + "gpt-4.1", + "gpt-4o", + "gpt-4o-mini", + "gpt-5", + "gpt-5.1", + "claude-sonnet-4-20250514", + "claude-sonnet-4-20250514[1m]", + "claude-sonnet-4-5-20250929", + "claude-sonnet-4-5-20250929[1m]", + "claude-sonnet-4-6", + "claude-sonnet-4-6[1m]", + "claude-opus-4-1-20250805", + "claude-opus-4-5-20251101", + "claude-opus-4-6", + "claude-opus-4-6[1m]", + "claude-opus-4-7", + "claude-opus-4-7[1m]", + "claude-opus-4-8", + "claude-opus-4-8[1m]" + ], + "type": "string", + "x-extensible-enum": [ + "claude-haiku-4-5-20251001", + "claude-sonnet-5", + "claude-sonnet-5[1m]", + "claude-opus-5", + "claude-opus-5[1m]", + "kimi-k3", + "kimi-k3-duvo", + "glm-5.2", + "glm-5.3-flash", + "deepseek-v4-flash", + "minimax-m3", + "qwen3.6-27b", + "d1-max", + "duvo-1-max", + "duvo-1-max-sonnet-1m", + "duvo-1-max-sonnet-4.5", + "duvo-1-max-sonnet-4.5-1m", + "duvo-1-max-opus", + "duvo-1-max-opus-4.5", + "gpt-4.1", + "gpt-4o", + "gpt-4o-mini", + "gpt-5", + "gpt-5.1", + "claude-sonnet-4-20250514", + "claude-sonnet-4-20250514[1m]", + "claude-sonnet-4-5-20250929", + "claude-sonnet-4-5-20250929[1m]", + "claude-sonnet-4-6", + "claude-sonnet-4-6[1m]", + "claude-opus-4-1-20250805", + "claude-opus-4-5-20251101", + "claude-opus-4-6", + "claude-opus-4-6[1m]", + "claude-opus-4-7", + "claude-opus-4-7[1m]", + "claude-opus-4-8", + "claude-opus-4-8[1m]" + ] + } + }, + "required": [ + "model" + ], + "type": "object" + }, + "browsing": { + "description": "Browsing/computer-use model configuration", + "properties": { + "model": { + "description": "Model identifier for the browsing provider", + "enum": [ + "gemini-2.5-pro", + "gemini-2.5-flash", + "gemini-3-pro-preview", + "claude-haiku-4-5", + "claude-sonnet-4-5", + "claude-opus-4-1" + ], + "type": "string" + }, + "provider": { + "description": "Provider backing the browsing/computer-use model", + "enum": [ + "google", + "anthropic" + ], + "type": "string" + } + }, + "required": [ + "provider", + "model" + ], + "type": "object" + } + }, + "required": [ + "agent", + "browsing" + ], + "type": "object" + }, + "options": { + "additionalProperties": {}, + "description": "Optional runtime options controlling how the agent executes", + "properties": { + "benchmarkExpectedOutcomes": { + "description": "Expected outcomes used when running benchmark scenarios", + "items": { + "properties": { + "criteria": { + "description": "Pass/fail criteria used to evaluate the outcome", + "type": "string" + }, + "description": { + "description": "Human-readable description of the expected outcome", + "type": "string" + } + }, + "required": [ + "description", + "criteria" + ], + "type": "object" + }, + "type": "array" + }, + "browserProvider": { + "description": "Browser infrastructure provider", + "enum": [ + "browserbase", + "browser-use" + ], + "type": "string" + }, + "evaluationSchemaId": { + "description": "ID of the evaluation schema to apply to runs of this agent", + "type": "string" + }, + "supervisedMode": { + "description": "Run the agent under Duvo's permission classifier: every tool call is classified as allow/deny/ask, with 'ask' routed to human-in-the-loop approval. Mutually exclusive with browsing and computer-use connections.", + "type": "boolean" + } + }, + "type": "object" + }, + "plugins": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": [], + "description": "Plugins to load — either a built-in plugin name (e.g. \"code-review\") or a GitHub URL (e.g. \"https://github.com/owner/repo\")" + }, + "skills": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": [], + "description": "IDs of skills (team or system) that should be available to the agent" + }, + "subAgents": { + "anyOf": [ + { + "items": { + "format": "uuid", + "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$", + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": [], + "description": "IDs of other agents (in the same team) to expose to this agent as Claude Code subagents. Each sub-agent runs with its own AOP and connections; the parent can delegate to them via the Agent tool." + } + }, + "required": [ + "models", + "input" + ], + "type": "object" + }, + "version": { + "const": "v2", + "description": "Schema version discriminator — must be \"v2\" for the current schema", + "type": "string" + } + }, + "required": [ + "version", + "data" + ], + "type": "object" + }, + { + "properties": { + "data": { + "description": "Code step configuration payload", + "properties": { + "files": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": [], + "description": "Team file paths this step can read at run time" + }, + "language": { + "description": "Language the step's program is written in", + "enum": [ + "python" + ], + "type": "string" + }, + "source": { + "description": "Where the step's program comes from", + "oneOf": [ + { + "properties": { + "code": { + "description": "Program held in the build config. Written to `main.py` and run with `python main.py`.", + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "inline", + "type": "string" + } + }, + "required": [ + "kind", + "code" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "files", + "type": "string" + }, + "startCommand": { + "description": "Command run from the root of the step's file system, e.g. \"python main.py\".", + "maxLength": 2000, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "startCommand" + ], + "type": "object" + } + ] + }, + "timeoutMs": { + "default": 600000, + "description": "Wall-clock budget for one execution of the step", + "exclusiveMinimum": 0, + "maximum": 3600000, + "type": "integer" + } + }, + "required": [ + "language", + "source" + ], + "type": "object" + }, + "version": { + "const": "v1", + "description": "Schema version discriminator — must be \"v1\" for the current code-step schema", + "type": "string" + } + }, + "required": [ + "version", + "data" + ], + "type": "object" + } +] - changed
Input schema / properties / config / descriptionPrevious value: -"Build configuration (latest schema version only; legacy v1 configs are not accepted)"New value: +"Build configuration. An agent step takes the latest agent schema (legacy v1 agent configs are not accepted); a code step takes a code-step config. Omit it to get the step family's default first build." - removed
Input schema / properties / config / propertiesRemoved value: -{ - "data": { - "description": "Agent configuration payload", - "properties": { - "files": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": [], - "description": "Team files that should be available to the agent, each given as the relative file path returned in the `path` field of `GET /v2/teams/{teamId}/files` (for example `report.md` or `folder/doc.md`) — not the `id` field, which is a GCS object identifier." - }, - "input": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "properties": { - "content": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "anyOf": [ - { - "properties": { - "text": { - "type": "string" - }, - "type": { - "const": "input_text", - "type": "string" - } - }, - "required": [ - "type", - "text" - ], - "type": "object" - }, - { - "properties": { - "detail": { - "anyOf": [ - { - "enum": [ - "low", - "high", - "auto" - ], - "type": "string" - }, - { - "type": "null" - } - ] - }, - "file_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "type": { - "const": "input_image", - "type": "string" - }, - "url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "type" - ], - "type": "object" - }, - { - "properties": { - "file_id": { - "type": "string" - }, - "type": { - "const": "input_file", - "type": "string" - } - }, - "required": [ - "type", - "file_id" - ], - "type": "object" - } - ] - }, - "type": "array" - } - ] - }, - "role": { - "enum": [ - "system", - "user", - "assistant" - ], - "type": "string" - }, - "type": { - "anyOf": [ - { - "const": "message", - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "role", - "content" - ], - "type": "object" - }, - "type": "array" - } - ], - "description": "Initial agent instructions — either a single system prompt string or a list of structured messages" - }, - "models": { - "description": "Model configuration for each capability the agent uses", - "properties": { - "agent": { - "description": "Primary agent model configuration", - "properties": { - "model": { - "description": "Model identifier used for the primary agent loop (Claude, or an OSS model when the team's oss_models flag — or oss_models_public for the public subset — is enabled)", - "enum": [ - "claude-haiku-4-5-20251001", - "claude-sonnet-5", - "claude-sonnet-5[1m]", - "claude-opus-5", - "claude-opus-5[1m]", - "kimi-k3", - "kimi-k3-duvo", - "glm-5.2", - "glm-5.3-flash", - "deepseek-v4-flash", - "minimax-m3", - "qwen3.6-27b", - "d1-max", - "duvo-1-max", - "duvo-1-max-sonnet-1m", - "duvo-1-max-sonnet-4.5", - "duvo-1-max-sonnet-4.5-1m", - "duvo-1-max-opus", - "duvo-1-max-opus-4.5", - "gpt-4.1", - "gpt-4o", - "gpt-4o-mini", - "gpt-5", - "gpt-5.1", - "claude-sonnet-4-20250514", - "claude-sonnet-4-20250514[1m]", - "claude-sonnet-4-5-20250929", - "claude-sonnet-4-5-20250929[1m]", - "claude-sonnet-4-6", - "claude-sonnet-4-6[1m]", - "claude-opus-4-1-20250805", - "claude-opus-4-5-20251101", - "claude-opus-4-6", - "claude-opus-4-6[1m]", - "claude-opus-4-7", - "claude-opus-4-7[1m]", - "claude-opus-4-8", - "claude-opus-4-8[1m]" - ], - "type": "string", - "x-extensible-enum": [ - "claude-haiku-4-5-20251001", - "claude-sonnet-5", - "claude-sonnet-5[1m]", - "claude-opus-5", - "claude-opus-5[1m]", - "kimi-k3", - "kimi-k3-duvo", - "glm-5.2", - "glm-5.3-flash", - "deepseek-v4-flash", - "minimax-m3", - "qwen3.6-27b", - "d1-max", - "duvo-1-max", - "duvo-1-max-sonnet-1m", - "duvo-1-max-sonnet-4.5", - "duvo-1-max-sonnet-4.5-1m", - "duvo-1-max-opus", - "duvo-1-max-opus-4.5", - "gpt-4.1", - "gpt-4o", - "gpt-4o-mini", - "gpt-5", - "gpt-5.1", - "claude-sonnet-4-20250514", - "claude-sonnet-4-20250514[1m]", - "claude-sonnet-4-5-20250929", - "claude-sonnet-4-5-20250929[1m]", - "claude-sonnet-4-6", - "claude-sonnet-4-6[1m]", - "claude-opus-4-1-20250805", - "claude-opus-4-5-20251101", - "claude-opus-4-6", - "claude-opus-4-6[1m]", - "claude-opus-4-7", - "claude-opus-4-7[1m]", - "claude-opus-4-8", - "claude-opus-4-8[1m]" - ] - } - }, - "required": [ - "model" - ], - "type": "object" - }, - "browsing": { - "description": "Browsing/computer-use model configuration", - "properties": { - "model": { - "description": "Model identifier for the browsing provider", - "enum": [ - "gemini-2.5-pro", - "gemini-2.5-flash", - "gemini-3-pro-preview", - "claude-haiku-4-5", - "claude-sonnet-4-5", - "claude-opus-4-1" - ], - "type": "string" - }, - "provider": { - "description": "Provider backing the browsing/computer-use model", - "enum": [ - "google", - "anthropic" - ], - "type": "string" - } - }, - "required": [ - "provider", - "model" - ], - "type": "object" - } - }, - "required": [ - "agent", - "browsing" - ], - "type": "object" - }, - "options": { - "additionalProperties": {}, - "description": "Optional runtime options controlling how the agent executes", - "properties": { - "benchmarkExpectedOutcomes": { - "description": "Expected outcomes used when running benchmark scenarios", - "items": { - "properties": { - "criteria": { - "description": "Pass/fail criteria used to evaluate the outcome", - "type": "string" - }, - "description": { - "description": "Human-readable description of the expected outcome", - "type": "string" - } - }, - "required": [ - "description", - "criteria" - ], - "type": "object" - }, - "type": "array" - }, - "browserProvider": { - "description": "Browser infrastructure provider", - "enum": [ - "browserbase", - "browser-use" - ], - "type": "string" - }, - "evaluationSchemaId": { - "description": "ID of the evaluation schema to apply to runs of this agent", - "type": "string" - }, - "supervisedMode": { - "description": "Run the agent under Duvo's permission classifier: every tool call is classified as allow/deny/ask, with 'ask' routed to human-in-the-loop approval. Mutually exclusive with browsing and computer-use connections.", - "type": "boolean" - } - }, - "type": "object" - }, - "plugins": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": [], - "description": "Plugins to load — either a built-in plugin name (e.g. \"code-review\") or a GitHub URL (e.g. \"https://github.com/owner/repo\")" - }, - "skills": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": [], - "description": "IDs of skills (team or system) that should be available to the agent" - }, - "subAgents": { - "anyOf": [ - { - "items": { - "format": "uuid", - "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$", - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": [], - "description": "IDs of other agents (in the same team) to expose to this agent as Claude Code subagents. Each sub-agent runs with its own AOP and connections; the parent can delegate to them via the Agent tool." - } - }, - "required": [ - "models", - "input" - ], - "type": "object" - }, - "version": { - "const": "v2", - "description": "Schema version discriminator — must be \"v2\" for the current schema", - "type": "string" - } -} - removed
Input schema / properties / config / requiredRemoved value: -[ - "version", - "data" -] - removed
Input schema / properties / config / typeRemoved value: -"object"
8 tool updates
- Changed
createAgent2 fields changed- changed
Input schema / properties / build / properties / config / properties / data / properties / models / properties / agent / properties / model / enumPrevious value: -[ - "claude-haiku-4-5-20251001", - "claude-sonnet-5", - "claude-sonnet-5[1m]", - "claude-opus-5", - "claude-opus-5[1m]", - "kimi-k3", - "kimi-k3-duvo", - "glm-5.2", - "deepseek-v4-flash", - "minimax-m3", - "qwen3.6-27b", - "d1-max", - "duvo-1-max", - "duvo-1-max-sonnet-1m", - "duvo-1-max-sonnet-4.5", - "duvo-1-max-sonnet-4.5-1m", - "duvo-1-max-opus", - "duvo-1-max-opus-4.5", - "gpt-4.1", - "gpt-4o", - "gpt-4o-mini", - "gpt-5", - "gpt-5.1", - "claude-sonnet-4-20250514", - "claude-sonnet-4-20250514[1m]", - "claude-sonnet-4-5-20250929", - "claude-sonnet-4-5-20250929[1m]", - "claude-sonnet-4-6", - "claude-sonnet-4-6[1m]", - "claude-opus-4-1-20250805", - "claude-opus-4-5-20251101", - "claude-opus-4-6", - "claude-opus-4-6[1m]", - "claude-opus-4-7", - "claude-opus-4-7[1m]", - "claude-opus-4-8", - "claude-opus-4-8[1m]" -]New value: +[ + "claude-haiku-4-5-20251001", + "claude-sonnet-5", + "claude-sonnet-5[1m]", + "claude-opus-5", + "claude-opus-5[1m]", + "kimi-k3", + "kimi-k3-duvo", + "glm-5.2", + "glm-5.3-flash", + "deepseek-v4-flash", + "minimax-m3", + "qwen3.6-27b", + "d1-max", + "duvo-1-max", + "duvo-1-max-sonnet-1m", + "duvo-1-max-sonnet-4.5", + "duvo-1-max-sonnet-4.5-1m", + "duvo-1-max-opus", + "duvo-1-max-opus-4.5", + "gpt-4.1", + "gpt-4o", + "gpt-4o-mini", + "gpt-5", + "gpt-5.1", + "claude-sonnet-4-20250514", + "claude-sonnet-4-20250514[1m]", + "claude-sonnet-4-5-20250929", + "claude-sonnet-4-5-20250929[1m]", + "claude-sonnet-4-6", + "claude-sonnet-4-6[1m]", + "claude-opus-4-1-20250805", + "claude-opus-4-5-20251101", + "claude-opus-4-6", + "claude-opus-4-6[1m]", + "claude-opus-4-7", + "claude-opus-4-7[1m]", + "claude-opus-4-8", + "claude-opus-4-8[1m]" +] - changed
Input schema / properties / build / properties / config / properties / data / properties / models / properties / agent / properties / model / x-extensible-enumPrevious value: -[ - "claude-haiku-4-5-20251001", - "claude-sonnet-5", - "claude-sonnet-5[1m]", - "claude-opus-5", - "claude-opus-5[1m]", - "kimi-k3", - "kimi-k3-duvo", - "glm-5.2", - "deepseek-v4-flash", - "minimax-m3", - "qwen3.6-27b", - "d1-max", - "duvo-1-max", - "duvo-1-max-sonnet-1m", - "duvo-1-max-sonnet-4.5", - "duvo-1-max-sonnet-4.5-1m", - "duvo-1-max-opus", - "duvo-1-max-opus-4.5", - "gpt-4.1", - "gpt-4o", - "gpt-4o-mini", - "gpt-5", - "gpt-5.1", - "claude-sonnet-4-20250514", - "claude-sonnet-4-20250514[1m]", - "claude-sonnet-4-5-20250929", - "claude-sonnet-4-5-20250929[1m]", - "claude-sonnet-4-6", - "claude-sonnet-4-6[1m]", - "claude-opus-4-1-20250805", - "claude-opus-4-5-20251101", - "claude-opus-4-6", - "claude-opus-4-6[1m]", - "claude-opus-4-7", - "claude-opus-4-7[1m]", - "claude-opus-4-8", - "claude-opus-4-8[1m]" -]New value: +[ + "claude-haiku-4-5-20251001", + "claude-sonnet-5", + "claude-sonnet-5[1m]", + "claude-opus-5", + "claude-opus-5[1m]", + "kimi-k3", + "kimi-k3-duvo", + "glm-5.2", + "glm-5.3-flash", + "deepseek-v4-flash", + "minimax-m3", + "qwen3.6-27b", + "d1-max", + "duvo-1-max", + "duvo-1-max-sonnet-1m", + "duvo-1-max-sonnet-4.5", + "duvo-1-max-sonnet-4.5-1m", + "duvo-1-max-opus", + "duvo-1-max-opus-4.5", + "gpt-4.1", + "gpt-4o", + "gpt-4o-mini", + "gpt-5", + "gpt-5.1", + "claude-sonnet-4-20250514", + "claude-sonnet-4-20250514[1m]", + "claude-sonnet-4-5-20250929", + "claude-sonnet-4-5-20250929[1m]", + "claude-sonnet-4-6", + "claude-sonnet-4-6[1m]", + "claude-opus-4-1-20250805", + "claude-opus-4-5-20251101", + "claude-opus-4-6", + "claude-opus-4-6[1m]", + "claude-opus-4-7", + "claude-opus-4-7[1m]", + "claude-opus-4-8", + "claude-opus-4-8[1m]" +]
- Added
createCaseQueueEvalRubric - Changed
createRevision2 fields changed- changed
Input schema / properties / config / properties / data / properties / models / properties / agent / properties / model / enumPrevious value: -[ - "claude-haiku-4-5-20251001", - "claude-sonnet-5", - "claude-sonnet-5[1m]", - "claude-opus-5", - "claude-opus-5[1m]", - "kimi-k3", - "kimi-k3-duvo", - "glm-5.2", - "deepseek-v4-flash", - "minimax-m3", - "qwen3.6-27b", - "d1-max", - "duvo-1-max", - "duvo-1-max-sonnet-1m", - "duvo-1-max-sonnet-4.5", - "duvo-1-max-sonnet-4.5-1m", - "duvo-1-max-opus", - "duvo-1-max-opus-4.5", - "gpt-4.1", - "gpt-4o", - "gpt-4o-mini", - "gpt-5", - "gpt-5.1", - "claude-sonnet-4-20250514", - "claude-sonnet-4-20250514[1m]", - "claude-sonnet-4-5-20250929", - "claude-sonnet-4-5-20250929[1m]", - "claude-sonnet-4-6", - "claude-sonnet-4-6[1m]", - "claude-opus-4-1-20250805", - "claude-opus-4-5-20251101", - "claude-opus-4-6", - "claude-opus-4-6[1m]", - "claude-opus-4-7", - "claude-opus-4-7[1m]", - "claude-opus-4-8", - "claude-opus-4-8[1m]" -]New value: +[ + "claude-haiku-4-5-20251001", + "claude-sonnet-5", + "claude-sonnet-5[1m]", + "claude-opus-5", + "claude-opus-5[1m]", + "kimi-k3", + "kimi-k3-duvo", + "glm-5.2", + "glm-5.3-flash", + "deepseek-v4-flash", + "minimax-m3", + "qwen3.6-27b", + "d1-max", + "duvo-1-max", + "duvo-1-max-sonnet-1m", + "duvo-1-max-sonnet-4.5", + "duvo-1-max-sonnet-4.5-1m", + "duvo-1-max-opus", + "duvo-1-max-opus-4.5", + "gpt-4.1", + "gpt-4o", + "gpt-4o-mini", + "gpt-5", + "gpt-5.1", + "claude-sonnet-4-20250514", + "claude-sonnet-4-20250514[1m]", + "claude-sonnet-4-5-20250929", + "claude-sonnet-4-5-20250929[1m]", + "claude-sonnet-4-6", + "claude-sonnet-4-6[1m]", + "claude-opus-4-1-20250805", + "claude-opus-4-5-20251101", + "claude-opus-4-6", + "claude-opus-4-6[1m]", + "claude-opus-4-7", + "claude-opus-4-7[1m]", + "claude-opus-4-8", + "claude-opus-4-8[1m]" +] - changed
Input schema / properties / config / properties / data / properties / models / properties / agent / properties / model / x-extensible-enumPrevious value: -[ - "claude-haiku-4-5-20251001", - "claude-sonnet-5", - "claude-sonnet-5[1m]", - "claude-opus-5", - "claude-opus-5[1m]", - "kimi-k3", - "kimi-k3-duvo", - "glm-5.2", - "deepseek-v4-flash", - "minimax-m3", - "qwen3.6-27b", - "d1-max", - "duvo-1-max", - "duvo-1-max-sonnet-1m", - "duvo-1-max-sonnet-4.5", - "duvo-1-max-sonnet-4.5-1m", - "duvo-1-max-opus", - "duvo-1-max-opus-4.5", - "gpt-4.1", - "gpt-4o", - "gpt-4o-mini", - "gpt-5", - "gpt-5.1", - "claude-sonnet-4-20250514", - "claude-sonnet-4-20250514[1m]", - "claude-sonnet-4-5-20250929", - "claude-sonnet-4-5-20250929[1m]", - "claude-sonnet-4-6", - "claude-sonnet-4-6[1m]", - "claude-opus-4-1-20250805", - "claude-opus-4-5-20251101", - "claude-opus-4-6", - "claude-opus-4-6[1m]", - "claude-opus-4-7", - "claude-opus-4-7[1m]", - "claude-opus-4-8", - "claude-opus-4-8[1m]" -]New value: +[ + "claude-haiku-4-5-20251001", + "claude-sonnet-5", + "claude-sonnet-5[1m]", + "claude-opus-5", + "claude-opus-5[1m]", + "kimi-k3", + "kimi-k3-duvo", + "glm-5.2", + "glm-5.3-flash", + "deepseek-v4-flash", + "minimax-m3", + "qwen3.6-27b", + "d1-max", + "duvo-1-max", + "duvo-1-max-sonnet-1m", + "duvo-1-max-sonnet-4.5", + "duvo-1-max-sonnet-4.5-1m", + "duvo-1-max-opus", + "duvo-1-max-opus-4.5", + "gpt-4.1", + "gpt-4o", + "gpt-4o-mini", + "gpt-5", + "gpt-5.1", + "claude-sonnet-4-20250514", + "claude-sonnet-4-20250514[1m]", + "claude-sonnet-4-5-20250929", + "claude-sonnet-4-5-20250929[1m]", + "claude-sonnet-4-6", + "claude-sonnet-4-6[1m]", + "claude-opus-4-1-20250805", + "claude-opus-4-5-20251101", + "claude-opus-4-6", + "claude-opus-4-6[1m]", + "claude-opus-4-7", + "claude-opus-4-7[1m]", + "claude-opus-4-8", + "claude-opus-4-8[1m]" +]
- Added
deleteCaseQueueEvalRubric - Added
duplicateAgent - Added
getCaseQueueEvalRubrics - Added
replaceCaseQueueEvalRubrics - Added
updateCaseQueueEvalRubric
6 tool updates
- Added
createCaseAttachmentUploadUrl - Added
deleteCaseAttachment - Added
finalizeCaseAttachment - Added
getCaseAttachmentDownloadUrl - Changed
initiateClarityPhoneInterview1 field changed- removed
Input schema / properties / language / defaultRemoved value: -"en"
- Added
listCaseAttachments
3 tool updates
- Added
completeClarityImageUpload - Added
createClarityImageUploadUrl - Changed
updateAgent1 field changed- changed
Input schema / properties / pinned / descriptionPrevious value: -"Pin the agent to the top of your agents list (true) or unpin it (false). Per-user — each viewer has their own pin. On teams using Automations, pin state is read-only: the current pin is returned unchanged and no pin/unpin is applied."New value: +"Pin the agent to the top of your agents list (true) or unpin it (false). Per-user — each viewer has their own pin. A team on Automations has no agents list for a pin to order, so a pin or unpin there is refused with a 409."
5 tool updates
- Added
getBatchQueueStats - Changed
getNotificationBatch1 field changed- changed
Input schema / properties / type / enumPrevious value: -[ - "connection_broken", - "job_issue", - "eval_issue", - "job_done", - "background_job", - "schedule_issue" -]New value: +[ + "connection_broken", + "critical_eval_issue", + "eval_issue", + "job_issue", + "job_done", + "background_job", + "schedule_issue" +]
- Changed
getNotificationFeed1 field changed- changed
Input schema / properties / type / enumPrevious value: -[ - "connection_broken", - "job_issue", - "eval_issue", - "job_done", - "background_job", - "schedule_issue" -]New value: +[ + "connection_broken", + "critical_eval_issue", + "eval_issue", + "job_issue", + "job_done", + "background_job", + "schedule_issue" +]
- Changed
listNotifications2 fields changed- changed
Input schema / properties / type / descriptionPrevious value: -"Only return notifications of this type. One of: connection_broken, job_issue, eval_issue, job_done, background_job, schedule_issue."New value: +"Only return notifications of this type. One of: connection_broken, critical_eval_issue, eval_issue, job_issue, job_done, background_job, schedule_issue." - changed
Input schema / properties / type / enumPrevious value: -[ - "connection_broken", - "job_issue", - "eval_issue", - "job_done", - "background_job", - "schedule_issue" -]New value: +[ + "connection_broken", + "critical_eval_issue", + "eval_issue", + "job_issue", + "job_done", + "background_job", + "schedule_issue" +]
- Changed
markNotificationBatchRead2 fields changed- changed
Input schema / properties / types / items / enumPrevious value: -[ - "connection_broken", - "job_issue", - "eval_issue", - "job_done", - "background_job", - "schedule_issue" -]New value: +[ + "connection_broken", + "critical_eval_issue", + "eval_issue", + "job_issue", + "job_done", + "background_job", + "schedule_issue" +] - changed
Input schema / properties / types / maxItemsPrevious value: -6New value: +7
1 tool update
- Changed
saveClarityProcessSnapshot1 field changed- changed
Input schema / properties / steps / items / oneOfPrevious value: -[ - { - "properties": { - "action": { - "anyOf": [ - { - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Verb-led one-liner summarizing the concrete action performed. Example: \"Reviews invoice line items in NetSuite against the purchase order.\"" - }, - "assumptions": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "description": "Assumptions the LLM made when extracting this step that were not directly stated in captures. Null if none. Used by verification agents to flag risky inferences. Example: [\"Invoices are reviewed within 24 hours of receipt\"]" - }, - "condition": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Always null on events; included for shape compatibility across variants." - }, - "confidence": { - "description": "Confidence in the accuracy of this step given evidence quality and completeness. \"high\" = directly stated by multiple sources, \"medium\" = stated by one source or inferred from strong signals, \"low\" = inferred with significant assumptions.", - "enum": [ - "low", - "medium", - "high" - ], - "type": "string" - }, - "description": { - "anyOf": [ - { - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Optional prose describing what happens at this event. May be null for structural markers." - }, - "exception": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Known exceptions, errors, or failure modes observed in the captures for this step. Null when none were mentioned. Example: \"Customer disputes line items or PO number does not match\"" - }, - "extraCaptureNeeded": { - "anyOf": [ - { - "properties": { - "gap": { - "description": "Plain-language description of what about this step is unknown or under-specified, blocking automation. One short sentence. Example: \"We don't know which fields the AP analyst copies from the invoice into NetSuite.\"", - "minLength": 1, - "type": "string" - }, - "id": { - "description": "Id of the `clarity_proposal_extra_capture_request` row this slot points at. Created server-side by the agent after the LLM call; the LLM never produces this value.", - "format": "uuid", - "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$", - "type": "string" - }, - "proposal": { - "anyOf": [ - { - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ], - "description": "What the new capture should include in order to resolve the gap — concrete actions, screens, or decisions the user should walk through. Optional: omit when no specific proposal can be inferred. Example: \"Walk through reviewing one invoice in NetSuite end-to-end while narrating each field you check.\"" - } - }, - "required": [ - "id", - "gap" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "handling": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "How exceptions or escalations are handled — escalation path, fallback action, or retry strategy. Null when no exception or no handling described. Example: \"Escalate to AP manager via email and pause processing until resolved\"" - }, - "id": { - "description": "Stable identifier for the step. Referenced by targetSteps[].stepId and by postprocessing agents annotating specific steps. Example: \"step-review-invoice\"", - "minLength": 1, - "type": "string" - }, - "input": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Information or artifacts required to start this step. Null on start events or steps with no preconditions. Example: \"Invoice PDF and matching purchase order number\"" - }, - "nodeSubtype": { - "description": "BPMN event subtype. \"start\" (entry trigger), \"end\" (terminal state), \"timer\" (time-based wait), \"message\" (external communication), \"escalation\" (route to higher authority).", - "enum": [ - "start", - "end", - "timer", - "message", - "escalation" - ], - "type": "string" - }, - "nodeType": { - "const": "event", - "type": "string" - }, - "openQuestions": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "description": "Specific gaps in understanding that a follow-up capture should address. Null if none. Drives the next interview or document request. Example: [\"Is there a backup approver when the AP manager is out of office?\"]" - }, - "output": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "What this step produces or updates. Null on pure waits or events that emit nothing. Example: \"Approved invoice record in NetSuite with reviewer signature\"" - }, - "rationale": { - "anyOf": [ - { - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Optional reason for the event's existence. May be null for structural markers." - }, - "readiness": { - "anyOf": [ - { - "enum": [ - "low", - "medium", - "high" - ], - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Automation-readiness rating for this step. \"high\" = fully automatable today, \"medium\" = partially automatable or needs minor changes, \"low\" = blocked by manual review, judgement, or missing data." - }, - "readinessRationale": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "One-sentence justification for the readiness rating, citing the specific signals that drove the choice. Example: \"Requires human judgement on edge cases that are not documented in the captures.\"" - }, - "role": { - "anyOf": [ - { - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Performer of this step — the specific job title, team, or system. Use \"Duvo\" for automated actions and \"System\" for system-triggered steps. Examples: \"Finance Analyst\", \"Sales Operations\", \"Duvo\", \"System\"" - }, - "sources": { - "description": "Evidence supporting this event. Empty array allowed (structural markers carry no evidence); non-empty values must follow the source schema.", - "items": { - "properties": { - "attribution": { - "description": "Human-readable source label identifying who or what the evidence comes from. Examples: \"Anna (sales interview)\", \"Onboarding SOP §3.2\", \"Slack #ops 2024-06-12\"", - "minLength": 1, - "type": "string" - }, - "captureId": { - "description": "Durable clarity_capture id for this source. Use app-owned ids from the evidence index, never sandbox file paths.", - "minLength": 1, - "type": "string" - }, - "evidenceId": { - "description": "Stable id of the evidence unit from /workspace/captures/evidence-index.json when generation used that index.", - "minLength": 1, - "type": "string" - }, - "excerpt": { - "description": "Verbatim supporting text quoted from the capture, document, or transcript. Example: \"We always wait for finance to sign off before sending the invoice.\"", - "minLength": 1, - "type": "string" - }, - "locator": { - "description": "Durable in-capture location for the excerpt. Missing means legacy free-text source; unresolved means a structured citation was attempted but could not be resolved.", - "oneOf": [ - { - "properties": { - "messageIndex": { - "description": "Zero-based index into the capture transcript message array. This is the durable key; timestampMs is only supplemental.", - "maximum": 9007199254740991, - "minimum": 0, - "type": "integer" - }, - "timestampMs": { - "description": "Optional epoch-millisecond timestamp for the transcript message when the capture supplied one.", - "maximum": 9007199254740991, - "minimum": 0, - "type": "integer" - }, - "type": { - "const": "transcript_message", - "type": "string" - } - }, - "required": [ - "type", - "messageIndex" - ], - "type": "object" - }, - { - "properties": { - "endLine": { - "description": "Optional one-based line number where the cited text ends on pageNumber.", - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "endOffset": { - "description": "Exclusive character offset into the stored capture text. Must be greater than startOffset.", - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "pageNumber": { - "description": "Optional one-based PDF page number when the stored capture has page metadata.", - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "startLine": { - "description": "Optional one-based line number where the cited text starts on pageNumber.", - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "startOffset": { - "description": "Zero-based character offset into the stored capture text.", - "maximum": 9007199254740991, - "minimum": 0, - "type": "integer" - }, - "type": { - "const": "document_text_range", - "type": "string" - } - }, - "required": [ - "type", - "startOffset", - "endOffset" - ], - "type": "object" - }, - { - "properties": { - "elementId": { - "description": "BPMN XML element id within an uploaded .bpmn document.", - "minLength": 1, - "type": "string" - }, - "elementType": { - "description": "Optional BPMN element type as parsed from the XML, for example \"bpmn:UserTask\" or \"bpmn:ExclusiveGateway\".", - "minLength": 1, - "type": "string" - }, - "name": { - "description": "Optional BPMN element name as parsed from the XML. The element id is the durable key.", - "minLength": 1, - "type": "string" - }, - "type": { - "const": "bpmn_element", - "type": "string" - } - }, - "required": [ - "type", - "elementId" - ], - "type": "object" - }, - { - "properties": { - "timestampMs": { - "description": "Epoch-millisecond frame timestamp matching a screenshare frame filename.", - "maximum": 9007199254740991, - "minimum": 0, - "type": "integer" - }, - "type": { - "const": "screenshare_frame", - "type": "string" - } - }, - "required": [ - "type", - "timestampMs" - ], - "type": "object" - }, - { - "properties": { - "type": { - "const": "manual", - "type": "string" - } - }, - "required": [ - "type" - ], - "type": "object" - }, - { - "properties": { - "reason": { - "minLength": 1, - "type": "string" - }, - "type": { - "const": "unresolved", - "type": "string" - } - }, - "required": [ - "type" - ], - "type": "object" - } - ] - }, - "resolutionStatus": { - "description": "Resolution status for the structured source link. Legacy sources may omit this field.", - "enum": [ - "resolved", - "unresolved", - "legacy", - "manual" - ], - "type": "string" - }, - "sourceConfidence": { - "description": "Confidence in this individual source citation. \"high\" = direct quote at the locator, \"medium\" = strong nearby evidence, \"low\" = weak or inferred support.", - "enum": [ - "low", - "medium", - "high" - ], - "type": "string" - } - }, - "required": [ - "attribution", - "excerpt" - ], - "type": "object" - }, - "type": "array" - }, - "system": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "System, tool, or application used to perform this step. Null when the step is purely manual or is a decision/event with no associated tool. Examples: \"NetSuite\", \"Gmail\", \"Excel\", null" - }, - "targetSteps": { - "description": "Outgoing BPMN edges from this step. Empty array only on end events. Exclusive and inclusive gateways must have ≥2 entries with exactly one isDefault: true.", - "items": { - "properties": { - "isDefault": { - "description": "True on exactly one outgoing edge of an exclusive or inclusive gateway, marking the fallback taken when no other condition matches. False on all other edges.", - "type": "boolean" - }, - "label": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Human-readable label shown on the BPMN edge. For gateways, the outcome answer; for default flows, \"Otherwise\". Examples: \"Approved\", \"> $5k\", \"Otherwise\"" - }, - "stepId": { - "description": "Id of the step this edge points to. Must match an existing step.id in the same steps array. Example: \"step-review-invoice\"", - "minLength": 1, - "type": "string" - } - }, - "required": [ - "stepId", - "label", - "isDefault" - ], - "type": "object" - }, - "type": "array" - }, - "title": { - "description": "Required node label used in lists and BPMN node labels. Structural markers use defaults such as \"Start\" and \"End\".", - "minLength": 1, - "type": "string" - } - }, - "required": [ - "id", - "targetSteps", - "title", - "action", - "role", - "system", - "input", - "output", - "exception", - "handling", - "assumptions", - "openQuestions", - "confidence", - "nodeType", - "nodeSubtype", - "description", - "rationale", - "sources", - "condition" - ], - "type": "object" - }, - { - "properties": { - "action": { - "anyOf": [ - { - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Verb-led one-liner summarizing the concrete action performed. Example: \"Reviews invoice line items in NetSuite against the purchase order.\"" - }, - "assumptions": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "description": "Assumptions the LLM made when extracting this step that were not directly stated in captures. Null if none. Used by verification agents to flag risky inferences. Example: [\"Invoices are reviewed within 24 hours of receipt\"]" - }, - "condition": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Optional precondition that gates this task. Null when the task is unconditional. Example: \"Only when invoice total exceeds $10,000\"" - }, - "confidence": { - "description": "Confidence in the accuracy of this step given evidence quality and completeness. \"high\" = directly stated by multiple sources, \"medium\" = stated by one source or inferred from strong signals, \"low\" = inferred with significant assumptions.", - "enum": [ - "low", - "medium", - "high" - ], - "type": "string" - }, - "description": { - "description": "Full prose paragraph describing what happens in this step in natural language. Used for documentation reconstruction. Example: \"Finance reviews the invoice in NetSuite, checking line item accuracy and matching against the purchase order before flagging for approval.\"", - "minLength": 1, - "type": "string" - }, - "exception": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Known exceptions, errors, or failure modes observed in the captures for this step. Null when none were mentioned. Example: \"Customer disputes line items or PO number does not match\"" - }, - "extraCaptureNeeded": { - "anyOf": [ - { - "properties": { - "gap": { - "description": "Plain-language description of what about this step is unknown or under-specified, blocking automation. One short sentence. Example: \"We don't know which fields the AP analyst copies from the invoice into NetSuite.\"", - "minLength": 1, - "type": "string" - }, - "id": { - "description": "Id of the `clarity_proposal_extra_capture_request` row this slot points at. Created server-side by the agent after the LLM call; the LLM never produces this value.", - "format": "uuid", - "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$", - "type": "string" - }, - "proposal": { - "anyOf": [ - { - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ], - "description": "What the new capture should include in order to resolve the gap — concrete actions, screens, or decisions the user should walk through. Optional: omit when no specific proposal can be inferred. Example: \"Walk through reviewing one invoice in NetSuite end-to-end while narrating each field you check.\"" - } - }, - "required": [ - "id", - "gap" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "handling": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "How exceptions or escalations are handled — escalation path, fallback action, or retry strategy. Null when no exception or no handling described. Example: \"Escalate to AP manager via email and pause processing until resolved\"" - }, - "id": { - "description": "Stable identifier for the step. Referenced by targetSteps[].stepId and by postprocessing agents annotating specific steps. Example: \"step-review-invoice\"", - "minLength": 1, - "type": "string" - }, - "input": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Information or artifacts required to start this step. Null on start events or steps with no preconditions. Example: \"Invoice PDF and matching purchase order number\"" - }, - "nodeSubtype": { - "description": "BPMN task subtype. \"user\" (human work), \"service\" (automated/API call), \"send\"/\"receive\" (messaging), \"manual\" (offline physical work), \"businessRule\" (rule engine), \"script\" (code execution).", - "enum": [ - "user", - "service", - "send", - "receive", - "manual", - "businessRule", - "script" - ], - "type": "string" - }, - "nodeType": { - "const": "task", - "type": "string" - }, - "openQuestions": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "description": "Specific gaps in understanding that a follow-up capture should address. Null if none. Drives the next interview or document request. Example: [\"Is there a backup approver when the AP manager is out of office?\"]" - }, - "output": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "What this step produces or updates. Null on pure waits or events that emit nothing. Example: \"Approved invoice record in NetSuite with reviewer signature\"" - }, - "rationale": { - "description": "Why this step exists in the process — its purpose or business reason. Used by downstream agents to assess whether the step is essential or removable. Example: \"Catches mispriced line items before they reach the customer and prevents downstream credit notes.\"", - "minLength": 1, - "type": "string" - }, - "readiness": { - "anyOf": [ - { - "enum": [ - "low", - "medium", - "high" - ], - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Automation-readiness rating for this step. \"high\" = fully automatable today, \"medium\" = partially automatable or needs minor changes, \"low\" = blocked by manual review, judgement, or missing data." - }, - "readinessRationale": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "One-sentence justification for the readiness rating, citing the specific signals that drove the choice. Example: \"Requires human judgement on edge cases that are not documented in the captures.\"" - }, - "role": { - "anyOf": [ - { - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Performer of this step — the specific job title, team, or system. Use \"Duvo\" for automated actions and \"System\" for system-triggered steps. Examples: \"Finance Analyst\", \"Sales Operations\", \"Duvo\", \"System\"" - }, - "sources": { - "description": "Evidence supporting this step's existence and details. At least one source is required — every step must trace back to something in the captures.", - "items": { - "properties": { - "attribution": { - "description": "Human-readable source label identifying who or what the evidence comes from. Examples: \"Anna (sales interview)\", \"Onboarding SOP §3.2\", \"Slack #ops 2024-06-12\"", - "minLength": 1, - "type": "string" - }, - "captureId": { - "description": "Durable clarity_capture id for this source. Use app-owned ids from the evidence index, never sandbox file paths.", - "minLength": 1, - "type": "string" - }, - "evidenceId": { - "description": "Stable id of the evidence unit from /workspace/captures/evidence-index.json when generation used that index.", - "minLength": 1, - "type": "string" - }, - "excerpt": { - "description": "Verbatim supporting text quoted from the capture, document, or transcript. Example: \"We always wait for finance to sign off before sending the invoice.\"", - "minLength": 1, - "type": "string" - }, - "locator": { - "description": "Durable in-capture location for the excerpt. Missing means legacy free-text source; unresolved means a structured citation was attempted but could not be resolved.", - "oneOf": [ - { - "properties": { - "messageIndex": { - "description": "Zero-based index into the capture transcript message array. This is the durable key; timestampMs is only supplemental.", - "maximum": 9007199254740991, - "minimum": 0, - "type": "integer" - }, - "timestampMs": { - "description": "Optional epoch-millisecond timestamp for the transcript message when the capture supplied one.", - "maximum": 9007199254740991, - "minimum": 0, - "type": "integer" - }, - "type": { - "const": "transcript_message", - "type": "string" - } - }, - "required": [ - "type", - "messageIndex" - ], - "type": "object" - }, - { - "properties": { - "endLine": { - "description": "Optional one-based line number where the cited text ends on pageNumber.", - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "endOffset": { - "description": "Exclusive character offset into the stored capture text. Must be greater than startOffset.", - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "pageNumber": { - "description": "Optional one-based PDF page number when the stored capture has page metadata.", - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "startLine": { - "description": "Optional one-based line number where the cited text starts on pageNumber.", - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "startOffset": { - "description": "Zero-based character offset into the stored capture text.", - "maximum": 9007199254740991, - "minimum": 0, - "type": "integer" - }, - "type": { - "const": "document_text_range", - "type": "string" - } - }, - "required": [ - "type", - "startOffset", - "endOffset" - ], - "type": "object" - }, - { - "properties": { - "elementId": { - "description": "BPMN XML element id within an uploaded .bpmn document.", - "minLength": 1, - "type": "string" - }, - "elementType": { - "description": "Optional BPMN element type as parsed from the XML, for example \"bpmn:UserTask\" or \"bpmn:ExclusiveGateway\".", - "minLength": 1, - "type": "string" - }, - "name": { - "description": "Optional BPMN element name as parsed from the XML. The element id is the durable key.", - "minLength": 1, - "type": "string" - }, - "type": { - "const": "bpmn_element", - "type": "string" - } - }, - "required": [ - "type", - "elementId" - ], - "type": "object" - }, - { - "properties": { - "timestampMs": { - "description": "Epoch-millisecond frame timestamp matching a screenshare frame filename.", - "maximum": 9007199254740991, - "minimum": 0, - "type": "integer" - }, - "type": { - "const": "screenshare_frame", - "type": "string" - } - }, - "required": [ - "type", - "timestampMs" - ], - "type": "object" - }, - { - "properties": { - "type": { - "const": "manual", - "type": "string" - } - }, - "required": [ - "type" - ], - "type": "object" - }, - { - "properties": { - "reason": { - "minLength": 1, - "type": "string" - }, - "type": { - "const": "unresolved", - "type": "string" - } - }, - "required": [ - "type" - ], - "type": "object" - } - ] - }, - "resolutionStatus": { - "description": "Resolution status for the structured source link. Legacy sources may omit this field.", - "enum": [ - "resolved", - "unresolved", - "legacy", - "manual" - ], - "type": "string" - }, - "sourceConfidence": { - "description": "Confidence in this individual source citation. \"high\" = direct quote at the locator, \"medium\" = strong nearby evidence, \"low\" = weak or inferred support.", - "enum": [ - "low", - "medium", - "high" - ], - "type": "string" - } - }, - "required": [ - "attribution", - "excerpt" - ], - "type": "object" - }, - "minItems": 1, - "type": "array" - }, - "system": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "System, tool, or application used to perform this step. Null when the step is purely manual or is a decision/event with no associated tool. Examples: \"NetSuite\", \"Gmail\", \"Excel\", null" - }, - "targetSteps": { - "description": "Outgoing BPMN edges from this step. Empty array only on end events. Exclusive and inclusive gateways must have ≥2 entries with exactly one isDefault: true.", - "items": { - "properties": { - "isDefault": { - "description": "True on exactly one outgoing edge of an exclusive or inclusive gateway, marking the fallback taken when no other condition matches. False on all other edges.", - "type": "boolean" - }, - "label": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Human-readable label shown on the BPMN edge. For gateways, the outcome answer; for default flows, \"Otherwise\". Examples: \"Approved\", \"> $5k\", \"Otherwise\"" - }, - "stepId": { - "description": "Id of the step this edge points to. Must match an existing step.id in the same steps array. Example: \"step-review-invoice\"", - "minLength": 1, - "type": "string" - } - }, - "required": [ - "stepId", - "label", - "isDefault" - ], - "type": "object" - }, - "type": "array" - }, - "title": { - "description": "Required node label used in lists and BPMN node labels. Structural markers use defaults such as \"Start\" and \"End\".", - "minLength": 1, - "type": "string" - } - }, - "required": [ - "id", - "targetSteps", - "title", - "action", - "role", - "system", - "input", - "output", - "exception", - "handling", - "assumptions", - "openQuestions", - "confidence", - "nodeType", - "nodeSubtype", - "description", - "rationale", - "sources", - "condition" - ], - "type": "object" - }, - { - "properties": { - "action": { - "anyOf": [ - { - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Verb-led one-liner summarizing the concrete action performed. Example: \"Reviews invoice line items in NetSuite against the purchase order.\"" - }, - "assumptions": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "description": "Assumptions the LLM made when extracting this step that were not directly stated in captures. Null if none. Used by verification agents to flag risky inferences. Example: [\"Invoices are reviewed within 24 hours of receipt\"]" - }, - "condition": { - "description": "Decision criteria evaluated at this gateway. BPMN requires this on every branching gateway. Existing rows persisted with null/empty values parse as \"unknown\" via a read-side preprocess; producers should write a real condition string going forward.", - "minLength": 1, - "type": "string" - }, - "confidence": { - "description": "Confidence in the accuracy of this step given evidence quality and completeness. \"high\" = directly stated by multiple sources, \"medium\" = stated by one source or inferred from strong signals, \"low\" = inferred with significant assumptions.", - "enum": [ - "low", - "medium", - "high" - ], - "type": "string" - }, - "description": { - "description": "Full prose describing the decision logic at this gateway.", - "minLength": 1, - "type": "string" - }, - "exception": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Known exceptions, errors, or failure modes observed in the captures for this step. Null when none were mentioned. Example: \"Customer disputes line items or PO number does not match\"" - }, - "extraCaptureNeeded": { - "anyOf": [ - { - "properties": { - "gap": { - "description": "Plain-language description of what about this step is unknown or under-specified, blocking automation. One short sentence. Example: \"We don't know which fields the AP analyst copies from the invoice into NetSuite.\"", - "minLength": 1, - "type": "string" - }, - "id": { - "description": "Id of the `clarity_proposal_extra_capture_request` row this slot points at. Created server-side by the agent after the LLM call; the LLM never produces this value.", - "format": "uuid", - "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$", - "type": "string" - }, - "proposal": { - "anyOf": [ - { - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ], - "description": "What the new capture should include in order to resolve the gap — concrete actions, screens, or decisions the user should walk through. Optional: omit when no specific proposal can be inferred. Example: \"Walk through reviewing one invoice in NetSuite end-to-end while narrating each field you check.\"" - } - }, - "required": [ - "id", - "gap" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "handling": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "How exceptions or escalations are handled — escalation path, fallback action, or retry strategy. Null when no exception or no handling described. Example: \"Escalate to AP manager via email and pause processing until resolved\"" - }, - "id": { - "description": "Stable identifier for the step. Referenced by targetSteps[].stepId and by postprocessing agents annotating specific steps. Example: \"step-review-invoice\"", - "minLength": 1, - "type": "string" - }, - "input": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Information or artifacts required to start this step. Null on start events or steps with no preconditions. Example: \"Invoice PDF and matching purchase order number\"" - }, - "nodeSubtype": { - "description": "BPMN gateway subtype. \"exclusive\" (XOR — exactly one branch taken), \"parallel\" (AND — all branches taken), \"inclusive\" (OR — one or more branches taken).", - "enum": [ - "exclusive", - "parallel", - "inclusive" - ], - "type": "string" - }, - "nodeType": { - "const": "gateway", - "type": "string" - }, - "openQuestions": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "description": "Specific gaps in understanding that a follow-up capture should address. Null if none. Drives the next interview or document request. Example: [\"Is there a backup approver when the AP manager is out of office?\"]" - }, - "output": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "What this step produces or updates. Null on pure waits or events that emit nothing. Example: \"Approved invoice record in NetSuite with reviewer signature\"" - }, - "rationale": { - "description": "Why this branching decision exists in the process.", - "minLength": 1, - "type": "string" - }, - "readiness": { - "anyOf": [ - { - "enum": [ - "low", - "medium", - "high" - ], - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Automation-readiness rating for this step. \"high\" = fully automatable today, \"medium\" = partially automatable or needs minor changes, \"low\" = blocked by manual review, judgement, or missing data." - }, - "readinessRationale": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "One-sentence justification for the readiness rating, citing the specific signals that drove the choice. Example: \"Requires human judgement on edge cases that are not documented in the captures.\"" - }, - "role": { - "anyOf": [ - { - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Performer of this step — the specific job title, team, or system. Use \"Duvo\" for automated actions and \"System\" for system-triggered steps. Examples: \"Finance Analyst\", \"Sales Operations\", \"Duvo\", \"System\"" - }, - "sources": { - "description": "Evidence supporting the decision criteria.", - "items": { - "properties": { - "attribution": { - "description": "Human-readable source label identifying who or what the evidence comes from. Examples: \"Anna (sales interview)\", \"Onboarding SOP §3.2\", \"Slack #ops 2024-06-12\"", - "minLength": 1, - "type": "string" - }, - "captureId": { - "description": "Durable clarity_capture id for this source. Use app-owned ids from the evidence index, never sandbox file paths.", - "minLength": 1, - "type": "string" - }, - "evidenceId": { - "description": "Stable id of the evidence unit from /workspace/captures/evidence-index.json when generation used that index.", - "minLength": 1, - "type": "string" - }, - "excerpt": { - "description": "Verbatim supporting text quoted from the capture, document, or transcript. Example: \"We always wait for finance to sign off before sending the invoice.\"", - "minLength": 1, - "type": "string" - }, - "locator": { - "description": "Durable in-capture location for the excerpt. Missing means legacy free-text source; unresolved means a structured citation was attempted but could not be resolved.", - "oneOf": [ - { - "properties": { - "messageIndex": { - "description": "Zero-based index into the capture transcript message array. This is the durable key; timestampMs is only supplemental.", - "maximum": 9007199254740991, - "minimum": 0, - "type": "integer" - }, - "timestampMs": { - "description": "Optional epoch-millisecond timestamp for the transcript message when the capture supplied one.", - "maximum": 9007199254740991, - "minimum": 0, - "type": "integer" - }, - "type": { - "const": "transcript_message", - "type": "string" - } - }, - "required": [ - "type", - "messageIndex" - ], - "type": "object" - }, - { - "properties": { - "endLine": { - "description": "Optional one-based line number where the cited text ends on pageNumber.", - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "endOffset": { - "description": "Exclusive character offset into the stored capture text. Must be greater than startOffset.", - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "pageNumber": { - "description": "Optional one-based PDF page number when the stored capture has page metadata.", - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "startLine": { - "description": "Optional one-based line number where the cited text starts on pageNumber.", - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "startOffset": { - "description": "Zero-based character offset into the stored capture text.", - "maximum": 9007199254740991, - "minimum": 0, - "type": "integer" - }, - "type": { - "const": "document_text_range", - "type": "string" - } - }, - "required": [ - "type", - "startOffset", - "endOffset" - ], - "type": "object" - }, - { - "properties": { - "elementId": { - "description": "BPMN XML element id within an uploaded .bpmn document.", - "minLength": 1, - "type": "string" - }, - "elementType": { - "description": "Optional BPMN element type as parsed from the XML, for example \"bpmn:UserTask\" or \"bpmn:ExclusiveGateway\".", - "minLength": 1, - "type": "string" - }, - "name": { - "description": "Optional BPMN element name as parsed from the XML. The element id is the durable key.", - "minLength": 1, - "type": "string" - }, - "type": { - "const": "bpmn_element", - "type": "string" - } - }, - "required": [ - "type", - "elementId" - ], - "type": "object" - }, - { - "properties": { - "timestampMs": { - "description": "Epoch-millisecond frame timestamp matching a screenshare frame filename.", - "maximum": 9007199254740991, - "minimum": 0, - "type": "integer" - }, - "type": { - "const": "screenshare_frame", - "type": "string" - } - }, - "required": [ - "type", - "timestampMs" - ], - "type": "object" - }, - { - "properties": { - "type": { - "const": "manual", - "type": "string" - } - }, - "required": [ - "type" - ], - "type": "object" - }, - { - "properties": { - "reason": { - "minLength": 1, - "type": "string" - }, - "type": { - "const": "unresolved", - "type": "string" - } - }, - "required": [ - "type" - ], - "type": "object" - } - ] - }, - "resolutionStatus": { - "description": "Resolution status for the structured source link. Legacy sources may omit this field.", - "enum": [ - "resolved", - "unresolved", - "legacy", - "manual" - ], - "type": "string" - }, - "sourceConfidence": { - "description": "Confidence in this individual source citation. \"high\" = direct quote at the locator, \"medium\" = strong nearby evidence, \"low\" = weak or inferred support.", - "enum": [ - "low", - "medium", - "high" - ], - "type": "string" - } - }, - "required": [ - "attribution", - "excerpt" - ], - "type": "object" - }, - "minItems": 1, - "type": "array" - }, - "system": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "System, tool, or application used to perform this step. Null when the step is purely manual or is a decision/event with no associated tool. Examples: \"NetSuite\", \"Gmail\", \"Excel\", null" - }, - "targetSteps": { - "description": "Outgoing BPMN edges from this step. Empty array only on end events. Exclusive and inclusive gateways must have ≥2 entries with exactly one isDefault: true.", - "items": { - "properties": { - "isDefault": { - "description": "True on exactly one outgoing edge of an exclusive or inclusive gateway, marking the fallback taken when no other condition matches. False on all other edges.", - "type": "boolean" - }, - "label": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Human-readable label shown on the BPMN edge. For gateways, the outcome answer; for default flows, \"Otherwise\". Examples: \"Approved\", \"> $5k\", \"Otherwise\"" - }, - "stepId": { - "description": "Id of the step this edge points to. Must match an existing step.id in the same steps array. Example: \"step-review-invoice\"", - "minLength": 1, - "type": "string" - } - }, - "required": [ - "stepId", - "label", - "isDefault" - ], - "type": "object" - }, - "type": "array" - }, - "title": { - "description": "Required node label used in lists and BPMN node labels. Structural markers use defaults such as \"Start\" and \"End\".", - "minLength": 1, - "type": "string" - } - }, - "required": [ - "id", - "targetSteps", - "title", - "action", - "role", - "system", - "input", - "output", - "exception", - "handling", - "assumptions", - "openQuestions", - "confidence", - "nodeType", - "nodeSubtype", - "description", - "rationale", - "sources", - "condition" - ], - "type": "object" - } -]New value: +[ + { + "properties": { + "action": { + "anyOf": [ + { + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Verb-led one-liner summarizing the concrete action performed. Example: \"Reviews invoice line items in NetSuite against the purchase order.\"" + }, + "assumptions": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Assumptions the LLM made when extracting this step that were not directly stated in captures. Null if none. Used by verification agents to flag risky inferences. Example: [\"Invoices are reviewed within 24 hours of receipt\"]" + }, + "condition": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Always null on events; included for shape compatibility across variants." + }, + "confidence": { + "description": "Confidence in the accuracy of this step given evidence quality and completeness. \"high\" = directly stated by multiple sources, \"medium\" = stated by one source or inferred from strong signals, \"low\" = inferred with significant assumptions.", + "enum": [ + "low", + "medium", + "high" + ], + "type": "string" + }, + "description": { + "anyOf": [ + { + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Optional prose describing what happens at this event. May be null for structural markers." + }, + "exception": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Known exceptions, errors, or failure modes observed in the captures for this step. Null when none were mentioned. Example: \"Customer disputes line items or PO number does not match\"" + }, + "extraCaptureNeeded": { + "anyOf": [ + { + "properties": { + "gap": { + "description": "Plain-language description of what about this step is unknown or under-specified, blocking automation. One short sentence. Example: \"We don't know which fields the AP analyst copies from the invoice into NetSuite.\"", + "minLength": 1, + "type": "string" + }, + "id": { + "description": "Id of the `clarity_proposal_extra_capture_request` row this slot points at. Created server-side by the agent after the LLM call; the LLM never produces this value.", + "format": "uuid", + "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$", + "type": "string" + }, + "proposal": { + "anyOf": [ + { + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ], + "description": "What the new capture should include in order to resolve the gap — concrete actions, screens, or decisions the user should walk through. Optional: omit when no specific proposal can be inferred. Example: \"Walk through reviewing one invoice in NetSuite end-to-end while narrating each field you check.\"" + } + }, + "required": [ + "id", + "gap" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "handling": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "How exceptions or escalations are handled — escalation path, fallback action, or retry strategy. Null when no exception or no handling described. Example: \"Escalate to AP manager via email and pause processing until resolved\"" + }, + "id": { + "description": "Stable identifier for the step. Referenced by targetSteps[].stepId and by postprocessing agents annotating specific steps. Example: \"step-review-invoice\"", + "minLength": 1, + "type": "string" + }, + "input": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Information or artifacts required to start this step. Null on start events or steps with no preconditions. Example: \"Invoice PDF and matching purchase order number\"" + }, + "linkedAgentId": { + "anyOf": [ + { + "format": "uuid", + "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Id of the Duvo Agent that performs this step. Set by a person in edit mode, never by a generating or postprocessing agent; the save route rejects an id that is not a live Agent on the process's team." + }, + "nodeSubtype": { + "description": "BPMN event subtype. \"start\" (entry trigger), \"end\" (terminal state), \"timer\" (time-based wait), \"message\" (external communication), \"escalation\" (route to higher authority).", + "enum": [ + "start", + "end", + "timer", + "message", + "escalation" + ], + "type": "string" + }, + "nodeType": { + "const": "event", + "type": "string" + }, + "openQuestions": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Specific gaps in understanding that a follow-up capture should address. Null if none. Drives the next interview or document request. Example: [\"Is there a backup approver when the AP manager is out of office?\"]" + }, + "output": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "What this step produces or updates. Null on pure waits or events that emit nothing. Example: \"Approved invoice record in NetSuite with reviewer signature\"" + }, + "rationale": { + "anyOf": [ + { + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Optional reason for the event's existence. May be null for structural markers." + }, + "readiness": { + "anyOf": [ + { + "enum": [ + "low", + "medium", + "high" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Automation-readiness rating for this step. \"high\" = fully automatable today, \"medium\" = partially automatable or needs minor changes, \"low\" = blocked by manual review, judgement, or missing data." + }, + "readinessRationale": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "One-sentence justification for the readiness rating, citing the specific signals that drove the choice. Example: \"Requires human judgement on edge cases that are not documented in the captures.\"" + }, + "role": { + "anyOf": [ + { + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Performer of this step — the specific job title, team, or system. Use \"Duvo\" for automated actions and \"System\" for system-triggered steps. Examples: \"Finance Analyst\", \"Sales Operations\", \"Duvo\", \"System\"" + }, + "sources": { + "description": "Evidence supporting this event. Empty array allowed (structural markers carry no evidence); non-empty values must follow the source schema.", + "items": { + "properties": { + "attribution": { + "description": "Human-readable source label identifying who or what the evidence comes from. Examples: \"Anna (sales interview)\", \"Onboarding SOP §3.2\", \"Slack #ops 2024-06-12\"", + "minLength": 1, + "type": "string" + }, + "captureId": { + "description": "Durable clarity_capture id for this source. Use app-owned ids from the evidence index, never sandbox file paths.", + "minLength": 1, + "type": "string" + }, + "evidenceId": { + "description": "Stable id of the evidence unit from /workspace/captures/evidence-index.json when generation used that index.", + "minLength": 1, + "type": "string" + }, + "excerpt": { + "description": "Verbatim supporting text quoted from the capture, document, or transcript. Example: \"We always wait for finance to sign off before sending the invoice.\"", + "minLength": 1, + "type": "string" + }, + "locator": { + "description": "Durable in-capture location for the excerpt. Missing means legacy free-text source; unresolved means a structured citation was attempted but could not be resolved.", + "oneOf": [ + { + "properties": { + "messageIndex": { + "description": "Zero-based index into the capture transcript message array. This is the durable key; timestampMs is only supplemental.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "timestampMs": { + "description": "Optional epoch-millisecond timestamp for the transcript message when the capture supplied one.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "type": { + "const": "transcript_message", + "type": "string" + } + }, + "required": [ + "type", + "messageIndex" + ], + "type": "object" + }, + { + "properties": { + "endLine": { + "description": "Optional one-based line number where the cited text ends on pageNumber.", + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "endOffset": { + "description": "Exclusive character offset into the stored capture text. Must be greater than startOffset.", + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "pageNumber": { + "description": "Optional one-based PDF page number when the stored capture has page metadata.", + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "startLine": { + "description": "Optional one-based line number where the cited text starts on pageNumber.", + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "startOffset": { + "description": "Zero-based character offset into the stored capture text.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "type": { + "const": "document_text_range", + "type": "string" + } + }, + "required": [ + "type", + "startOffset", + "endOffset" + ], + "type": "object" + }, + { + "properties": { + "elementId": { + "description": "BPMN XML element id within an uploaded .bpmn document.", + "minLength": 1, + "type": "string" + }, + "elementType": { + "description": "Optional BPMN element type as parsed from the XML, for example \"bpmn:UserTask\" or \"bpmn:ExclusiveGateway\".", + "minLength": 1, + "type": "string" + }, + "name": { + "description": "Optional BPMN element name as parsed from the XML. The element id is the durable key.", + "minLength": 1, + "type": "string" + }, + "type": { + "const": "bpmn_element", + "type": "string" + } + }, + "required": [ + "type", + "elementId" + ], + "type": "object" + }, + { + "properties": { + "timestampMs": { + "description": "Epoch-millisecond frame timestamp matching a screenshare frame filename.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "type": { + "const": "screenshare_frame", + "type": "string" + } + }, + "required": [ + "type", + "timestampMs" + ], + "type": "object" + }, + { + "properties": { + "type": { + "const": "manual", + "type": "string" + } + }, + "required": [ + "type" + ], + "type": "object" + }, + { + "properties": { + "reason": { + "minLength": 1, + "type": "string" + }, + "type": { + "const": "unresolved", + "type": "string" + } + }, + "required": [ + "type" + ], + "type": "object" + } + ] + }, + "resolutionStatus": { + "description": "Resolution status for the structured source link. Legacy sources may omit this field.", + "enum": [ + "resolved", + "unresolved", + "legacy", + "manual" + ], + "type": "string" + }, + "sourceConfidence": { + "description": "Confidence in this individual source citation. \"high\" = direct quote at the locator, \"medium\" = strong nearby evidence, \"low\" = weak or inferred support.", + "enum": [ + "low", + "medium", + "high" + ], + "type": "string" + } + }, + "required": [ + "attribution", + "excerpt" + ], + "type": "object" + }, + "type": "array" + }, + "system": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "System, tool, or application used to perform this step. Null when the step is purely manual or is a decision/event with no associated tool. Examples: \"NetSuite\", \"Gmail\", \"Excel\", null" + }, + "targetSteps": { + "description": "Outgoing BPMN edges from this step. Empty array only on end events. Exclusive and inclusive gateways must have ≥2 entries with exactly one isDefault: true.", + "items": { + "properties": { + "isDefault": { + "description": "True on exactly one outgoing edge of an exclusive or inclusive gateway, marking the fallback taken when no other condition matches. False on all other edges.", + "type": "boolean" + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Human-readable label shown on the BPMN edge. For gateways, the outcome answer; for default flows, \"Otherwise\". Examples: \"Approved\", \"> $5k\", \"Otherwise\"" + }, + "stepId": { + "description": "Id of the step this edge points to. Must match an existing step.id in the same steps array. Example: \"step-review-invoice\"", + "minLength": 1, + "type": "string" + } + }, + "required": [ + "stepId", + "label", + "isDefault" + ], + "type": "object" + }, + "type": "array" + }, + "title": { + "description": "Required node label used in lists and BPMN node labels. Structural markers use defaults such as \"Start\" and \"End\".", + "minLength": 1, + "type": "string" + } + }, + "required": [ + "id", + "targetSteps", + "title", + "action", + "role", + "system", + "input", + "output", + "exception", + "handling", + "assumptions", + "openQuestions", + "confidence", + "nodeType", + "nodeSubtype", + "description", + "rationale", + "sources", + "condition" + ], + "type": "object" + }, + { + "properties": { + "action": { + "anyOf": [ + { + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Verb-led one-liner summarizing the concrete action performed. Example: \"Reviews invoice line items in NetSuite against the purchase order.\"" + }, + "assumptions": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Assumptions the LLM made when extracting this step that were not directly stated in captures. Null if none. Used by verification agents to flag risky inferences. Example: [\"Invoices are reviewed within 24 hours of receipt\"]" + }, + "condition": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Optional precondition that gates this task. Null when the task is unconditional. Example: \"Only when invoice total exceeds $10,000\"" + }, + "confidence": { + "description": "Confidence in the accuracy of this step given evidence quality and completeness. \"high\" = directly stated by multiple sources, \"medium\" = stated by one source or inferred from strong signals, \"low\" = inferred with significant assumptions.", + "enum": [ + "low", + "medium", + "high" + ], + "type": "string" + }, + "description": { + "description": "Full prose paragraph describing what happens in this step in natural language. Used for documentation reconstruction. Example: \"Finance reviews the invoice in NetSuite, checking line item accuracy and matching against the purchase order before flagging for approval.\"", + "minLength": 1, + "type": "string" + }, + "exception": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Known exceptions, errors, or failure modes observed in the captures for this step. Null when none were mentioned. Example: \"Customer disputes line items or PO number does not match\"" + }, + "extraCaptureNeeded": { + "anyOf": [ + { + "properties": { + "gap": { + "description": "Plain-language description of what about this step is unknown or under-specified, blocking automation. One short sentence. Example: \"We don't know which fields the AP analyst copies from the invoice into NetSuite.\"", + "minLength": 1, + "type": "string" + }, + "id": { + "description": "Id of the `clarity_proposal_extra_capture_request` row this slot points at. Created server-side by the agent after the LLM call; the LLM never produces this value.", + "format": "uuid", + "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$", + "type": "string" + }, + "proposal": { + "anyOf": [ + { + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ], + "description": "What the new capture should include in order to resolve the gap — concrete actions, screens, or decisions the user should walk through. Optional: omit when no specific proposal can be inferred. Example: \"Walk through reviewing one invoice in NetSuite end-to-end while narrating each field you check.\"" + } + }, + "required": [ + "id", + "gap" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "handling": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "How exceptions or escalations are handled — escalation path, fallback action, or retry strategy. Null when no exception or no handling described. Example: \"Escalate to AP manager via email and pause processing until resolved\"" + }, + "id": { + "description": "Stable identifier for the step. Referenced by targetSteps[].stepId and by postprocessing agents annotating specific steps. Example: \"step-review-invoice\"", + "minLength": 1, + "type": "string" + }, + "input": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Information or artifacts required to start this step. Null on start events or steps with no preconditions. Example: \"Invoice PDF and matching purchase order number\"" + }, + "linkedAgentId": { + "anyOf": [ + { + "format": "uuid", + "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Id of the Duvo Agent that performs this step. Set by a person in edit mode, never by a generating or postprocessing agent; the save route rejects an id that is not a live Agent on the process's team." + }, + "nodeSubtype": { + "description": "BPMN task subtype. \"user\" (human work), \"service\" (automated/API call), \"send\"/\"receive\" (messaging), \"manual\" (offline physical work), \"businessRule\" (rule engine), \"script\" (code execution).", + "enum": [ + "user", + "service", + "send", + "receive", + "manual", + "businessRule", + "script" + ], + "type": "string" + }, + "nodeType": { + "const": "task", + "type": "string" + }, + "openQuestions": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Specific gaps in understanding that a follow-up capture should address. Null if none. Drives the next interview or document request. Example: [\"Is there a backup approver when the AP manager is out of office?\"]" + }, + "output": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "What this step produces or updates. Null on pure waits or events that emit nothing. Example: \"Approved invoice record in NetSuite with reviewer signature\"" + }, + "rationale": { + "description": "Why this step exists in the process — its purpose or business reason. Used by downstream agents to assess whether the step is essential or removable. Example: \"Catches mispriced line items before they reach the customer and prevents downstream credit notes.\"", + "minLength": 1, + "type": "string" + }, + "readiness": { + "anyOf": [ + { + "enum": [ + "low", + "medium", + "high" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Automation-readiness rating for this step. \"high\" = fully automatable today, \"medium\" = partially automatable or needs minor changes, \"low\" = blocked by manual review, judgement, or missing data." + }, + "readinessRationale": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "One-sentence justification for the readiness rating, citing the specific signals that drove the choice. Example: \"Requires human judgement on edge cases that are not documented in the captures.\"" + }, + "role": { + "anyOf": [ + { + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Performer of this step — the specific job title, team, or system. Use \"Duvo\" for automated actions and \"System\" for system-triggered steps. Examples: \"Finance Analyst\", \"Sales Operations\", \"Duvo\", \"System\"" + }, + "sources": { + "description": "Evidence supporting this step's existence and details. At least one source is required — every step must trace back to something in the captures.", + "items": { + "properties": { + "attribution": { + "description": "Human-readable source label identifying who or what the evidence comes from. Examples: \"Anna (sales interview)\", \"Onboarding SOP §3.2\", \"Slack #ops 2024-06-12\"", + "minLength": 1, + "type": "string" + }, + "captureId": { + "description": "Durable clarity_capture id for this source. Use app-owned ids from the evidence index, never sandbox file paths.", + "minLength": 1, + "type": "string" + }, + "evidenceId": { + "description": "Stable id of the evidence unit from /workspace/captures/evidence-index.json when generation used that index.", + "minLength": 1, + "type": "string" + }, + "excerpt": { + "description": "Verbatim supporting text quoted from the capture, document, or transcript. Example: \"We always wait for finance to sign off before sending the invoice.\"", + "minLength": 1, + "type": "string" + }, + "locator": { + "description": "Durable in-capture location for the excerpt. Missing means legacy free-text source; unresolved means a structured citation was attempted but could not be resolved.", + "oneOf": [ + { + "properties": { + "messageIndex": { + "description": "Zero-based index into the capture transcript message array. This is the durable key; timestampMs is only supplemental.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "timestampMs": { + "description": "Optional epoch-millisecond timestamp for the transcript message when the capture supplied one.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "type": { + "const": "transcript_message", + "type": "string" + } + }, + "required": [ + "type", + "messageIndex" + ], + "type": "object" + }, + { + "properties": { + "endLine": { + "description": "Optional one-based line number where the cited text ends on pageNumber.", + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "endOffset": { + "description": "Exclusive character offset into the stored capture text. Must be greater than startOffset.", + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "pageNumber": { + "description": "Optional one-based PDF page number when the stored capture has page metadata.", + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "startLine": { + "description": "Optional one-based line number where the cited text starts on pageNumber.", + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "startOffset": { + "description": "Zero-based character offset into the stored capture text.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "type": { + "const": "document_text_range", + "type": "string" + } + }, + "required": [ + "type", + "startOffset", + "endOffset" + ], + "type": "object" + }, + { + "properties": { + "elementId": { + "description": "BPMN XML element id within an uploaded .bpmn document.", + "minLength": 1, + "type": "string" + }, + "elementType": { + "description": "Optional BPMN element type as parsed from the XML, for example \"bpmn:UserTask\" or \"bpmn:ExclusiveGateway\".", + "minLength": 1, + "type": "string" + }, + "name": { + "description": "Optional BPMN element name as parsed from the XML. The element id is the durable key.", + "minLength": 1, + "type": "string" + }, + "type": { + "const": "bpmn_element", + "type": "string" + } + }, + "required": [ + "type", + "elementId" + ], + "type": "object" + }, + { + "properties": { + "timestampMs": { + "description": "Epoch-millisecond frame timestamp matching a screenshare frame filename.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "type": { + "const": "screenshare_frame", + "type": "string" + } + }, + "required": [ + "type", + "timestampMs" + ], + "type": "object" + }, + { + "properties": { + "type": { + "const": "manual", + "type": "string" + } + }, + "required": [ + "type" + ], + "type": "object" + }, + { + "properties": { + "reason": { + "minLength": 1, + "type": "string" + }, + "type": { + "const": "unresolved", + "type": "string" + } + }, + "required": [ + "type" + ], + "type": "object" + } + ] + }, + "resolutionStatus": { + "description": "Resolution status for the structured source link. Legacy sources may omit this field.", + "enum": [ + "resolved", + "unresolved", + "legacy", + "manual" + ], + "type": "string" + }, + "sourceConfidence": { + "description": "Confidence in this individual source citation. \"high\" = direct quote at the locator, \"medium\" = strong nearby evidence, \"low\" = weak or inferred support.", + "enum": [ + "low", + "medium", + "high" + ], + "type": "string" + } + }, + "required": [ + "attribution", + "excerpt" + ], + "type": "object" + }, + "minItems": 1, + "type": "array" + }, + "system": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "System, tool, or application used to perform this step. Null when the step is purely manual or is a decision/event with no associated tool. Examples: \"NetSuite\", \"Gmail\", \"Excel\", null" + }, + "targetSteps": { + "description": "Outgoing BPMN edges from this step. Empty array only on end events. Exclusive and inclusive gateways must have ≥2 entries with exactly one isDefault: true.", + "items": { + "properties": { + "isDefault": { + "description": "True on exactly one outgoing edge of an exclusive or inclusive gateway, marking the fallback taken when no other condition matches. False on all other edges.", + "type": "boolean" + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Human-readable label shown on the BPMN edge. For gateways, the outcome answer; for default flows, \"Otherwise\". Examples: \"Approved\", \"> $5k\", \"Otherwise\"" + }, + "stepId": { + "description": "Id of the step this edge points to. Must match an existing step.id in the same steps array. Example: \"step-review-invoice\"", + "minLength": 1, + "type": "string" + } + }, + "required": [ + "stepId", + "label", + "isDefault" + ], + "type": "object" + }, + "type": "array" + }, + "title": { + "description": "Required node label used in lists and BPMN node labels. Structural markers use defaults such as \"Start\" and \"End\".", + "minLength": 1, + "type": "string" + } + }, + "required": [ + "id", + "targetSteps", + "title", + "action", + "role", + "system", + "input", + "output", + "exception", + "handling", + "assumptions", + "openQuestions", + "confidence", + "nodeType", + "nodeSubtype", + "description", + "rationale", + "sources", + "condition" + ], + "type": "object" + }, + { + "properties": { + "action": { + "anyOf": [ + { + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Verb-led one-liner summarizing the concrete action performed. Example: \"Reviews invoice line items in NetSuite against the purchase order.\"" + }, + "assumptions": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Assumptions the LLM made when extracting this step that were not directly stated in captures. Null if none. Used by verification agents to flag risky inferences. Example: [\"Invoices are reviewed within 24 hours of receipt\"]" + }, + "condition": { + "description": "Decision criteria evaluated at this gateway. BPMN requires this on every branching gateway. Existing rows persisted with null/empty values parse as \"unknown\" via a read-side preprocess; producers should write a real condition string going forward.", + "minLength": 1, + "type": "string" + }, + "confidence": { + "description": "Confidence in the accuracy of this step given evidence quality and completeness. \"high\" = directly stated by multiple sources, \"medium\" = stated by one source or inferred from strong signals, \"low\" = inferred with significant assumptions.", + "enum": [ + "low", + "medium", + "high" + ], + "type": "string" + }, + "description": { + "description": "Full prose describing the decision logic at this gateway.", + "minLength": 1, + "type": "string" + }, + "exception": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Known exceptions, errors, or failure modes observed in the captures for this step. Null when none were mentioned. Example: \"Customer disputes line items or PO number does not match\"" + }, + "extraCaptureNeeded": { + "anyOf": [ + { + "properties": { + "gap": { + "description": "Plain-language description of what about this step is unknown or under-specified, blocking automation. One short sentence. Example: \"We don't know which fields the AP analyst copies from the invoice into NetSuite.\"", + "minLength": 1, + "type": "string" + }, + "id": { + "description": "Id of the `clarity_proposal_extra_capture_request` row this slot points at. Created server-side by the agent after the LLM call; the LLM never produces this value.", + "format": "uuid", + "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$", + "type": "string" + }, + "proposal": { + "anyOf": [ + { + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ], + "description": "What the new capture should include in order to resolve the gap — concrete actions, screens, or decisions the user should walk through. Optional: omit when no specific proposal can be inferred. Example: \"Walk through reviewing one invoice in NetSuite end-to-end while narrating each field you check.\"" + } + }, + "required": [ + "id", + "gap" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "handling": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "How exceptions or escalations are handled — escalation path, fallback action, or retry strategy. Null when no exception or no handling described. Example: \"Escalate to AP manager via email and pause processing until resolved\"" + }, + "id": { + "description": "Stable identifier for the step. Referenced by targetSteps[].stepId and by postprocessing agents annotating specific steps. Example: \"step-review-invoice\"", + "minLength": 1, + "type": "string" + }, + "input": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Information or artifacts required to start this step. Null on start events or steps with no preconditions. Example: \"Invoice PDF and matching purchase order number\"" + }, + "linkedAgentId": { + "anyOf": [ + { + "format": "uuid", + "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Id of the Duvo Agent that performs this step. Set by a person in edit mode, never by a generating or postprocessing agent; the save route rejects an id that is not a live Agent on the process's team." + }, + "nodeSubtype": { + "description": "BPMN gateway subtype. \"exclusive\" (XOR — exactly one branch taken), \"parallel\" (AND — all branches taken), \"inclusive\" (OR — one or more branches taken).", + "enum": [ + "exclusive", + "parallel", + "inclusive" + ], + "type": "string" + }, + "nodeType": { + "const": "gateway", + "type": "string" + }, + "openQuestions": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Specific gaps in understanding that a follow-up capture should address. Null if none. Drives the next interview or document request. Example: [\"Is there a backup approver when the AP manager is out of office?\"]" + }, + "output": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "What this step produces or updates. Null on pure waits or events that emit nothing. Example: \"Approved invoice record in NetSuite with reviewer signature\"" + }, + "rationale": { + "description": "Why this branching decision exists in the process.", + "minLength": 1, + "type": "string" + }, + "readiness": { + "anyOf": [ + { + "enum": [ + "low", + "medium", + "high" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Automation-readiness rating for this step. \"high\" = fully automatable today, \"medium\" = partially automatable or needs minor changes, \"low\" = blocked by manual review, judgement, or missing data." + }, + "readinessRationale": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "One-sentence justification for the readiness rating, citing the specific signals that drove the choice. Example: \"Requires human judgement on edge cases that are not documented in the captures.\"" + }, + "role": { + "anyOf": [ + { + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Performer of this step — the specific job title, team, or system. Use \"Duvo\" for automated actions and \"System\" for system-triggered steps. Examples: \"Finance Analyst\", \"Sales Operations\", \"Duvo\", \"System\"" + }, + "sources": { + "description": "Evidence supporting the decision criteria.", + "items": { + "properties": { + "attribution": { + "description": "Human-readable source label identifying who or what the evidence comes from. Examples: \"Anna (sales interview)\", \"Onboarding SOP §3.2\", \"Slack #ops 2024-06-12\"", + "minLength": 1, + "type": "string" + }, + "captureId": { + "description": "Durable clarity_capture id for this source. Use app-owned ids from the evidence index, never sandbox file paths.", + "minLength": 1, + "type": "string" + }, + "evidenceId": { + "description": "Stable id of the evidence unit from /workspace/captures/evidence-index.json when generation used that index.", + "minLength": 1, + "type": "string" + }, + "excerpt": { + "description": "Verbatim supporting text quoted from the capture, document, or transcript. Example: \"We always wait for finance to sign off before sending the invoice.\"", + "minLength": 1, + "type": "string" + }, + "locator": { + "description": "Durable in-capture location for the excerpt. Missing means legacy free-text source; unresolved means a structured citation was attempted but could not be resolved.", + "oneOf": [ + { + "properties": { + "messageIndex": { + "description": "Zero-based index into the capture transcript message array. This is the durable key; timestampMs is only supplemental.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "timestampMs": { + "description": "Optional epoch-millisecond timestamp for the transcript message when the capture supplied one.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "type": { + "const": "transcript_message", + "type": "string" + } + }, + "required": [ + "type", + "messageIndex" + ], + "type": "object" + }, + { + "properties": { + "endLine": { + "description": "Optional one-based line number where the cited text ends on pageNumber.", + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "endOffset": { + "description": "Exclusive character offset into the stored capture text. Must be greater than startOffset.", + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "pageNumber": { + "description": "Optional one-based PDF page number when the stored capture has page metadata.", + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "startLine": { + "description": "Optional one-based line number where the cited text starts on pageNumber.", + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "startOffset": { + "description": "Zero-based character offset into the stored capture text.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "type": { + "const": "document_text_range", + "type": "string" + } + }, + "required": [ + "type", + "startOffset", + "endOffset" + ], + "type": "object" + }, + { + "properties": { + "elementId": { + "description": "BPMN XML element id within an uploaded .bpmn document.", + "minLength": 1, + "type": "string" + }, + "elementType": { + "description": "Optional BPMN element type as parsed from the XML, for example \"bpmn:UserTask\" or \"bpmn:ExclusiveGateway\".", + "minLength": 1, + "type": "string" + }, + "name": { + "description": "Optional BPMN element name as parsed from the XML. The element id is the durable key.", + "minLength": 1, + "type": "string" + }, + "type": { + "const": "bpmn_element", + "type": "string" + } + }, + "required": [ + "type", + "elementId" + ], + "type": "object" + }, + { + "properties": { + "timestampMs": { + "description": "Epoch-millisecond frame timestamp matching a screenshare frame filename.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "type": { + "const": "screenshare_frame", + "type": "string" + } + }, + "required": [ + "type", + "timestampMs" + ], + "type": "object" + }, + { + "properties": { + "type": { + "const": "manual", + "type": "string" + } + }, + "required": [ + "type" + ], + "type": "object" + }, + { + "properties": { + "reason": { + "minLength": 1, + "type": "string" + }, + "type": { + "const": "unresolved", + "type": "string" + } + }, + "required": [ + "type" + ], + "type": "object" + } + ] + }, + "resolutionStatus": { + "description": "Resolution status for the structured source link. Legacy sources may omit this field.", + "enum": [ + "resolved", + "unresolved", + "legacy", + "manual" + ], + "type": "string" + }, + "sourceConfidence": { + "description": "Confidence in this individual source citation. \"high\" = direct quote at the locator, \"medium\" = strong nearby evidence, \"low\" = weak or inferred support.", + "enum": [ + "low", + "medium", + "high" + ], + "type": "string" + } + }, + "required": [ + "attribution", + "excerpt" + ], + "type": "object" + }, + "minItems": 1, + "type": "array" + }, + "system": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "System, tool, or application used to perform this step. Null when the step is purely manual or is a decision/event with no associated tool. Examples: \"NetSuite\", \"Gmail\", \"Excel\", null" + }, + "targetSteps": { + "description": "Outgoing BPMN edges from this step. Empty array only on end events. Exclusive and inclusive gateways must have ≥2 entries with exactly one isDefault: true.", + "items": { + "properties": { + "isDefault": { + "description": "True on exactly one outgoing edge of an exclusive or inclusive gateway, marking the fallback taken when no other condition matches. False on all other edges.", + "type": "boolean" + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Human-readable label shown on the BPMN edge. For gateways, the outcome answer; for default flows, \"Otherwise\". Examples: \"Approved\", \"> $5k\", \"Otherwise\"" + }, + "stepId": { + "description": "Id of the step this edge points to. Must match an existing step.id in the same steps array. Example: \"step-review-invoice\"", + "minLength": 1, + "type": "string" + } + }, + "required": [ + "stepId", + "label", + "isDefault" + ], + "type": "object" + }, + "type": "array" + }, + "title": { + "description": "Required node label used in lists and BPMN node labels. Structural markers use defaults such as \"Start\" and \"End\".", + "minLength": 1, + "type": "string" + } + }, + "required": [ + "id", + "targetSteps", + "title", + "action", + "role", + "system", + "input", + "output", + "exception", + "handling", + "assumptions", + "openQuestions", + "confidence", + "nodeType", + "nodeSubtype", + "description", + "rationale", + "sources", + "condition" + ], + "type": "object" + } +]
2 tool updates
- Changed
createAgent1 field changed- changed
Input schema / properties / build / properties / config / properties / data / properties / files / descriptionPrevious value: -"IDs of team files that should be available to the agent"New value: +"Team files that should be available to the agent, each given as the relative file path returned in the `path` field of `GET /v2/teams/{teamId}/files` (for example `report.md` or `folder/doc.md`) — not the `id` field, which is a GCS object identifier."
- Changed
createRevision1 field changed- changed
Input schema / properties / config / properties / data / properties / files / descriptionPrevious value: -"IDs of team files that should be available to the agent"New value: +"Team files that should be available to the agent, each given as the relative file path returned in the `path` field of `GET /v2/teams/{teamId}/files` (for example `report.md` or `folder/doc.md`) — not the `id` field, which is a GCS object identifier."
4 tool updates
- Changed
getNotificationFeed1 field changed- changed
Input schema / properties / agents / descriptionPrevious value: -"When 'mine', only return notifications for agents the authenticated user created. connection_broken notifications are always returned regardless, because a broken connection is everyone's to fix."New value: +"When 'mine', only return notifications for agents the authenticated user created. connection_broken notifications are always returned regardless, because they are not about an agent: a broken connection is only notified to the people who can act on it or escalate it, so filtering by agent authorship would hide it from the reader it was addressed to."
- Changed
listClarityLandscapeCaptures1 field changed- added
Input schema / properties / include_excludedAdded value: +{ + "default": "false", + "description": "Include captures excluded from Process Landscape analysis", + "enum": [ + "true", + "false" + ], + "type": "string" +}
- Changed
proposeClarityLandscapeProcess1 field changed- changed
Input schema / properties / materializationMode / descriptionPrevious value: -"Use \"proposal\" to record a process the organization plausibly needs, owned by `teamId` for review, WITHOUT creating a real process record. `teamId` is then required. A proposal is idempotent: an equivalent live proposal under the same parent is returned untouched rather than duplicated. Defaults to \"auto\", which materializes a real process when `teamId` is set — except in a landscape-onboarding chat, which may only propose, and so defaults to \"proposal\"."New value: +"Use \"proposal\" to record a process the organization plausibly needs, owned by `teamId` for review, WITHOUT creating a real process record. `teamId` is then required. Chat-scoped discovery agents may use proposal mode for their pinned team; direct human and API callers require Manager-or-above authority for that team. A proposal is idempotent: an equivalent live proposal under the same parent is returned untouched rather than duplicated. Defaults to \"auto\", which materializes a real process when `teamId` is set — except in a landscape-onboarding chat, which may only propose, and so defaults to \"proposal\"."
- Changed
sendPulseDashboardMessage1 field changed- added
Input schema / properties / selected_element / properties / openui_nodeAdded value: +{ + "properties": { + "component": { + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "source": { + "maxLength": 2000, + "type": "string" + }, + "statement": { + "maxLength": 200, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "statement", + "component" + ], + "type": "object" +}
2 tool updates
- Changed
createAgent2 fields changed- changed
Input schema / properties / build / properties / config / properties / data / properties / models / properties / agent / properties / model / enumPrevious value: -[ - "claude-haiku-4-5-20251001", - "claude-sonnet-5", - "claude-sonnet-5[1m]", - "claude-opus-5", - "claude-opus-5[1m]", - "kimi-k3", - "glm-5.2", - "deepseek-v4-flash", - "minimax-m3", - "qwen3.6-27b", - "d1-max", - "duvo-1-max", - "duvo-1-max-sonnet-1m", - "duvo-1-max-sonnet-4.5", - "duvo-1-max-sonnet-4.5-1m", - "duvo-1-max-opus", - "duvo-1-max-opus-4.5", - "gpt-4.1", - "gpt-4o", - "gpt-4o-mini", - "gpt-5", - "gpt-5.1", - "claude-sonnet-4-20250514", - "claude-sonnet-4-20250514[1m]", - "claude-sonnet-4-5-20250929", - "claude-sonnet-4-5-20250929[1m]", - "claude-sonnet-4-6", - "claude-sonnet-4-6[1m]", - "claude-opus-4-1-20250805", - "claude-opus-4-5-20251101", - "claude-opus-4-6", - "claude-opus-4-6[1m]", - "claude-opus-4-7", - "claude-opus-4-7[1m]", - "claude-opus-4-8", - "claude-opus-4-8[1m]" -]New value: +[ + "claude-haiku-4-5-20251001", + "claude-sonnet-5", + "claude-sonnet-5[1m]", + "claude-opus-5", + "claude-opus-5[1m]", + "kimi-k3", + "kimi-k3-duvo", + "glm-5.2", + "deepseek-v4-flash", + "minimax-m3", + "qwen3.6-27b", + "d1-max", + "duvo-1-max", + "duvo-1-max-sonnet-1m", + "duvo-1-max-sonnet-4.5", + "duvo-1-max-sonnet-4.5-1m", + "duvo-1-max-opus", + "duvo-1-max-opus-4.5", + "gpt-4.1", + "gpt-4o", + "gpt-4o-mini", + "gpt-5", + "gpt-5.1", + "claude-sonnet-4-20250514", + "claude-sonnet-4-20250514[1m]", + "claude-sonnet-4-5-20250929", + "claude-sonnet-4-5-20250929[1m]", + "claude-sonnet-4-6", + "claude-sonnet-4-6[1m]", + "claude-opus-4-1-20250805", + "claude-opus-4-5-20251101", + "claude-opus-4-6", + "claude-opus-4-6[1m]", + "claude-opus-4-7", + "claude-opus-4-7[1m]", + "claude-opus-4-8", + "claude-opus-4-8[1m]" +] - changed
Input schema / properties / build / properties / config / properties / data / properties / models / properties / agent / properties / model / x-extensible-enumPrevious value: -[ - "claude-haiku-4-5-20251001", - "claude-sonnet-5", - "claude-sonnet-5[1m]", - "claude-opus-5", - "claude-opus-5[1m]", - "kimi-k3", - "glm-5.2", - "deepseek-v4-flash", - "minimax-m3", - "qwen3.6-27b", - "d1-max", - "duvo-1-max", - "duvo-1-max-sonnet-1m", - "duvo-1-max-sonnet-4.5", - "duvo-1-max-sonnet-4.5-1m", - "duvo-1-max-opus", - "duvo-1-max-opus-4.5", - "gpt-4.1", - "gpt-4o", - "gpt-4o-mini", - "gpt-5", - "gpt-5.1", - "claude-sonnet-4-20250514", - "claude-sonnet-4-20250514[1m]", - "claude-sonnet-4-5-20250929", - "claude-sonnet-4-5-20250929[1m]", - "claude-sonnet-4-6", - "claude-sonnet-4-6[1m]", - "claude-opus-4-1-20250805", - "claude-opus-4-5-20251101", - "claude-opus-4-6", - "claude-opus-4-6[1m]", - "claude-opus-4-7", - "claude-opus-4-7[1m]", - "claude-opus-4-8", - "claude-opus-4-8[1m]" -]New value: +[ + "claude-haiku-4-5-20251001", + "claude-sonnet-5", + "claude-sonnet-5[1m]", + "claude-opus-5", + "claude-opus-5[1m]", + "kimi-k3", + "kimi-k3-duvo", + "glm-5.2", + "deepseek-v4-flash", + "minimax-m3", + "qwen3.6-27b", + "d1-max", + "duvo-1-max", + "duvo-1-max-sonnet-1m", + "duvo-1-max-sonnet-4.5", + "duvo-1-max-sonnet-4.5-1m", + "duvo-1-max-opus", + "duvo-1-max-opus-4.5", + "gpt-4.1", + "gpt-4o", + "gpt-4o-mini", + "gpt-5", + "gpt-5.1", + "claude-sonnet-4-20250514", + "claude-sonnet-4-20250514[1m]", + "claude-sonnet-4-5-20250929", + "claude-sonnet-4-5-20250929[1m]", + "claude-sonnet-4-6", + "claude-sonnet-4-6[1m]", + "claude-opus-4-1-20250805", + "claude-opus-4-5-20251101", + "claude-opus-4-6", + "claude-opus-4-6[1m]", + "claude-opus-4-7", + "claude-opus-4-7[1m]", + "claude-opus-4-8", + "claude-opus-4-8[1m]" +]
- Changed
createRevision2 fields changed- changed
Input schema / properties / config / properties / data / properties / models / properties / agent / properties / model / enumPrevious value: -[ - "claude-haiku-4-5-20251001", - "claude-sonnet-5", - "claude-sonnet-5[1m]", - "claude-opus-5", - "claude-opus-5[1m]", - "kimi-k3", - "glm-5.2", - "deepseek-v4-flash", - "minimax-m3", - "qwen3.6-27b", - "d1-max", - "duvo-1-max", - "duvo-1-max-sonnet-1m", - "duvo-1-max-sonnet-4.5", - "duvo-1-max-sonnet-4.5-1m", - "duvo-1-max-opus", - "duvo-1-max-opus-4.5", - "gpt-4.1", - "gpt-4o", - "gpt-4o-mini", - "gpt-5", - "gpt-5.1", - "claude-sonnet-4-20250514", - "claude-sonnet-4-20250514[1m]", - "claude-sonnet-4-5-20250929", - "claude-sonnet-4-5-20250929[1m]", - "claude-sonnet-4-6", - "claude-sonnet-4-6[1m]", - "claude-opus-4-1-20250805", - "claude-opus-4-5-20251101", - "claude-opus-4-6", - "claude-opus-4-6[1m]", - "claude-opus-4-7", - "claude-opus-4-7[1m]", - "claude-opus-4-8", - "claude-opus-4-8[1m]" -]New value: +[ + "claude-haiku-4-5-20251001", + "claude-sonnet-5", + "claude-sonnet-5[1m]", + "claude-opus-5", + "claude-opus-5[1m]", + "kimi-k3", + "kimi-k3-duvo", + "glm-5.2", + "deepseek-v4-flash", + "minimax-m3", + "qwen3.6-27b", + "d1-max", + "duvo-1-max", + "duvo-1-max-sonnet-1m", + "duvo-1-max-sonnet-4.5", + "duvo-1-max-sonnet-4.5-1m", + "duvo-1-max-opus", + "duvo-1-max-opus-4.5", + "gpt-4.1", + "gpt-4o", + "gpt-4o-mini", + "gpt-5", + "gpt-5.1", + "claude-sonnet-4-20250514", + "claude-sonnet-4-20250514[1m]", + "claude-sonnet-4-5-20250929", + "claude-sonnet-4-5-20250929[1m]", + "claude-sonnet-4-6", + "claude-sonnet-4-6[1m]", + "claude-opus-4-1-20250805", + "claude-opus-4-5-20251101", + "claude-opus-4-6", + "claude-opus-4-6[1m]", + "claude-opus-4-7", + "claude-opus-4-7[1m]", + "claude-opus-4-8", + "claude-opus-4-8[1m]" +] - changed
Input schema / properties / config / properties / data / properties / models / properties / agent / properties / model / x-extensible-enumPrevious value: -[ - "claude-haiku-4-5-20251001", - "claude-sonnet-5", - "claude-sonnet-5[1m]", - "claude-opus-5", - "claude-opus-5[1m]", - "kimi-k3", - "glm-5.2", - "deepseek-v4-flash", - "minimax-m3", - "qwen3.6-27b", - "d1-max", - "duvo-1-max", - "duvo-1-max-sonnet-1m", - "duvo-1-max-sonnet-4.5", - "duvo-1-max-sonnet-4.5-1m", - "duvo-1-max-opus", - "duvo-1-max-opus-4.5", - "gpt-4.1", - "gpt-4o", - "gpt-4o-mini", - "gpt-5", - "gpt-5.1", - "claude-sonnet-4-20250514", - "claude-sonnet-4-20250514[1m]", - "claude-sonnet-4-5-20250929", - "claude-sonnet-4-5-20250929[1m]", - "claude-sonnet-4-6", - "claude-sonnet-4-6[1m]", - "claude-opus-4-1-20250805", - "claude-opus-4-5-20251101", - "claude-opus-4-6", - "claude-opus-4-6[1m]", - "claude-opus-4-7", - "claude-opus-4-7[1m]", - "claude-opus-4-8", - "claude-opus-4-8[1m]" -]New value: +[ + "claude-haiku-4-5-20251001", + "claude-sonnet-5", + "claude-sonnet-5[1m]", + "claude-opus-5", + "claude-opus-5[1m]", + "kimi-k3", + "kimi-k3-duvo", + "glm-5.2", + "deepseek-v4-flash", + "minimax-m3", + "qwen3.6-27b", + "d1-max", + "duvo-1-max", + "duvo-1-max-sonnet-1m", + "duvo-1-max-sonnet-4.5", + "duvo-1-max-sonnet-4.5-1m", + "duvo-1-max-opus", + "duvo-1-max-opus-4.5", + "gpt-4.1", + "gpt-4o", + "gpt-4o-mini", + "gpt-5", + "gpt-5.1", + "claude-sonnet-4-20250514", + "claude-sonnet-4-20250514[1m]", + "claude-sonnet-4-5-20250929", + "claude-sonnet-4-5-20250929[1m]", + "claude-sonnet-4-6", + "claude-sonnet-4-6[1m]", + "claude-opus-4-1-20250805", + "claude-opus-4-5-20251101", + "claude-opus-4-6", + "claude-opus-4-6[1m]", + "claude-opus-4-7", + "claude-opus-4-7[1m]", + "claude-opus-4-8", + "claude-opus-4-8[1m]" +]
4 tool updates
- Changed
bulkUpdateCaseStatus2 fields changed- changed
Input schema / properties / status / descriptionPrevious value: -"Target status for each case. `completed` and `failed` are terminal; `pending` resets the case (the queue's trigger consumer, if any, will re-claim it)."New value: +"Target status for each case. `completed`, `failed`, and `canceled` are terminal — `canceled` records a deliberate human stop, distinct from a system `failed`. `pending` resets the case (the queue's trigger consumer, if any, will re-claim it). `success` is not settable: it means an evaluation passed." - changed
Input schema / properties / status / enumPrevious value: -[ - "pending", - "completed", - "failed" -]New value: +[ + "pending", + "completed", + "failed", + "canceled" +]
- Changed
createClarityLandscapeNode2 fields changed- removed
Input schema / properties / creationMode / defaultRemoved value: -"active" - changed
Input schema / properties / creationMode / descriptionPrevious value: -"Use \"proposal\" to add an area for review instead of asserting it exists. A proposal is idempotent: an equivalent live area under the same parent is returned untouched rather than duplicated."New value: +"Use \"proposal\" to add an area for review instead of asserting it exists. A proposal is idempotent: an equivalent live area under the same parent is returned untouched rather than duplicated. Defaults to \"active\" — except in a landscape-onboarding chat, which may only propose, and so defaults to \"proposal\"."
- Changed
listCases1 field changed- changed
Input schema / properties / status / descriptionPrevious value: -"Filter by one or more status buckets (comma-separated). Values: all, pending, processing, needs_input, postponed, needs_review, resolved, canceled."New value: +"Filter by one or more status buckets (comma-separated). Values: all, pending, processing, needs_input, postponed, needs_review, resolved, canceled. `processing` covers both a case actively being worked and one waiting on its evaluation."
- Changed
proposeClarityLandscapeProcess2 fields changed- removed
Input schema / properties / materializationMode / defaultRemoved value: -"auto" - changed
Input schema / properties / materializationMode / descriptionPrevious value: -"Use \"proposal\" to record a process the organization plausibly needs, owned by `teamId` for review, WITHOUT creating a real process record. `teamId` is then required. A proposal is idempotent: an equivalent live proposal under the same parent is returned untouched rather than duplicated. The default \"auto\" materializes a real process when `teamId` is set."New value: +"Use \"proposal\" to record a process the organization plausibly needs, owned by `teamId` for review, WITHOUT creating a real process record. `teamId` is then required. A proposal is idempotent: an equivalent live proposal under the same parent is returned untouched rather than duplicated. Defaults to \"auto\", which materializes a real process when `teamId` is set — except in a landscape-onboarding chat, which may only propose, and so defaults to \"proposal\"."
86 tool updates
- Added
acceptClarityCaptureSuggestion - Added
acceptClarityLandscapeNode - Added
acceptClarityProcessJoin - Added
acceptClarityTeamAssignmentSuggestion - Added
addClarityLandscapeNodePerson - Added
assignClarityExtraCaptureRequest - Added
assignClarityLandscapeCaptureRequest - Added
assignClarityLandscapeNodeTeam - Added
batchAddClarityLandscapeNodePeople - Added
buildClarityAutomation - Changed
bulkReprocessCases1 field changed- added
Input schema / properties / filters / properties / issue_severityAdded value: +{ + "items": { + "enum": [ + "critical", + "medium" + ], + "type": "string" + }, + "type": "array" +}
- Changed
bulkUpdateCasePriority1 field changed- added
Input schema / properties / filters / properties / issue_severityAdded value: +{ + "items": { + "enum": [ + "critical", + "medium" + ], + "type": "string" + }, + "type": "array" +}
- Changed
bulkUpdateCaseStatus1 field changed- added
Input schema / properties / filters / properties / issue_severityAdded value: +{ + "items": { + "enum": [ + "critical", + "medium" + ], + "type": "string" + }, + "type": "array" +}
- Added
completeClarityArtifactImport - Added
completeClarityDocumentUpload - Added
completeClarityOrganizationDocumentUpload - Added
completeClarityTeamDocumentUpload - Added
completeClarityVideoUpload - Added
createClarityArtifactImportUploadUrl - Added
createClarityDocumentUploadUrl - Added
createClarityFolder - Added
createClarityGuidance - Added
createClarityInviteLink - Added
createClarityOrganizationDocumentUploadUrl - Added
createClarityProcessNode - Added
createClarityTeamDocumentUploadUrl - Added
createClarityVideoUploadUrl - Added
declineClarityLandscapeNode - Added
deleteClarityArtifactChatConversation - Added
deleteClarityCapture - Added
deleteClarityFolder - Added
deleteClarityLandscapeNodeInterview - Added
deleteClarityOrganizationInterview - Added
deleteClarityProcess - Added
deleteClarityProcessInviteLink - Added
deleteClarityTeamInterview - Added
dismissClarityCaptureSuggestion - Added
dismissClarityTeamAssignmentSuggestion - Added
duplicateClarityProcess - Added
fileSuggestedClarityProcesses - Added
finalizeClarityOrganizationInterview - Added
generateClarityPortfolioIntelligence - Added
generateClarityProcessSnapshot - Added
getClarityArtifactChatMessages - Added
getClarityExport - Added
getClarityOrganizationInterview - Added
getClarityPortfolioIntelligence - Added
getClarityProcessInviteLink - Added
getClarityProcessJoinInfo - Added
getClarityProcessSharing - Added
getClarityTeamSettings - Added
initiateClarityPhoneInterview - Added
inviteClarityMeetingNotetaker - Added
inviteClarityOrganizationNotetaker - Added
listActiveClarityExports - Changed
listCases1 field changed- added
Input schema / properties / issue_severityAdded value: +{ + "description": "Filter by highest failing rubric severity (comma-separated). Values: critical, medium. Severity is a facet within the issues outcome, so it returns nothing when combined with a status bucket that excludes issues. `low` is not selectable: an all-low verdict is stored as success, so no case carries it.", + "type": "string" +}
- Added
listClarityArtifactChatConversations - Added
listClarityFolders - Added
listClarityLandscapeNodeInterviews - Added
listClarityLandscapeNodePeople - Added
listClarityOrganizationInterviews - Added
listClarityProcessMembers - Added
listClarityTeamInterviews - Added
moveClarityProcessesToFolder - Added
organizeClarityProcessLandscape - Added
postprocessClaritySnapshot - Added
promoteClarityProcessSnapshot - Added
removeClarityLandscapeNodePerson - Added
removeClarityProcessMember - Added
reorderClarityFolders - Added
reorderClarityLandscapeAreas - Added
revertClarityProcessSnapshot - Added
saveClarityProcessSnapshot - Changed
searchCases1 field changed- added
Input schema / properties / filters / properties / issue_severityAdded value: +{ + "items": { + "enum": [ + "critical", + "medium" + ], + "type": "string" + }, + "type": "array" +}
- Added
setupClarityFoldersFromLandscape - Added
startClarityExport - Added
stopClarityArtifactChatConversation - Added
stopClarityProcessSnapshot - Added
updateClarityFolder - Added
updateClarityGuidance - Added
updateClarityLandscapeNodePerson - Added
updateClarityOrganizationInterview - Added
updateClarityProcess - Added
updateClarityProcessSharing - Added
updateClarityTeamSettings - Added
upgradeClarityProcess
1 tool update
- Changed
updateQueue1 field changed- changed
Input schema / properties / name / descriptionPrevious value: -"New queue name. Must be unique within the team. This route is refused once a team has moved to Automations, where a queue is instead renamed through its revision binding and uniqueness is checked per revision on activation."New value: +"New queue name. Must be unique within the team. This route is refused once a team is on automation revisions, where a queue is instead renamed through its revision binding and uniqueness is checked per revision on activation."
2 tool updates
- Changed
createQueue1 field changed- changed
Input schema / properties / name / descriptionPrevious value: -"Queue name. Must be unique within the team."New value: +"Queue name. A standalone queue must be uniquely named within the team. A queue created inside an automation instead has to be uniquely named within a revision, which is checked when that revision is activated."
- Changed
updateQueue1 field changed- changed
Input schema / properties / name / descriptionPrevious value: -"New queue name. Must be unique within the team."New value: +"New queue name. Must be unique within the team. This route is refused once a team has moved to Automations, where a queue is instead renamed through its revision binding and uniqueness is checked per revision on activation."
235 tool updates
- First observed
answerPulseDashboardQuestion - First observed
assignCaseLabels - First observed
assignClarityProcessLabels - First observed
attachPulseDashboardConnection - First observed
attachRevisionIntegrations - First observed
attachRevisionLogin - First observed
attachRevisionSecret - First observed
authorizeMcpOAuth - First observed
bulkCreateTeamInvites - First observed
bulkReprocessCases - First observed
bulkUpdateCasePriority - First observed
bulkUpdateCaseStatus - First observed
checkMcpOAuth - First observed
consumeAgentSuggestion - First observed
createAgent - First observed
createAgentCaseTrigger - First observed
createAgentFolder - First observed
createAgentSlackTrigger - First observed
createCases - First observed
createClarityLandscapeNode - First observed
createClarityProcess - First observed
createClarityProcessLabel - First observed
createClarityProcessLink - First observed
createConnection - First observed
createCredential - First observed
createCustomIntegration - First observed
createEvalRubric - First observed
createFileUploadUrl - First observed
createOrgTeam - First observed
createPulseDashboard - First observed
createPulseDashboardAttachmentUploadUrl - First observed
createQueue - First observed
createQueueLabel - First observed
createRevision - First observed
createSandbox - First observed
createSandboxUploadUrl - First observed
createSchedule - First observed
createSecret - First observed
createSkill - First observed
createSkillRevision - First observed
createTeamInvite - First observed
createTeamInviteLink - First observed
deleteAgent - First observed
deleteAgentCaseTrigger - First observed
deleteAgentFolder - First observed
deleteAllNotifications - First observed
deleteCase - First observed
deleteClarityLandscapeNode - First observed
deleteClarityProcessLabel - First observed
deleteClarityProcessLink - First observed
deleteConnection - First observed
deleteCredential - First observed
deleteCustomIntegration - First observed
deleteEvalRubric - First observed
deleteFile - First observed
deletePulseDashboard - First observed
deleteQueue - First observed
deleteQueueLabel - First observed
deleteReadNotifications - First observed
deleteSchedule - First observed
deleteSecret - First observed
deleteSkill - First observed
deleteSkillRevision - First observed
deleteSlackTrigger - First observed
deleteTeamInvite - First observed
deleteTeamInviteLink - First observed
detachPulseDashboardConnection - First observed
detachRevisionLogin - First observed
detachRevisionSecret - First observed
dismissNotification - First observed
downloadSkill - First observed
duplicatePulseDashboard - First observed
exportPulseDashboardHtml - First observed
generateClarityProcessLandscape - First observed
getAgent - First observed
getAgentCaseTrigger - First observed
getAgentMemoryFile - First observed
getAgentSuggestion - First observed
getCase - First observed
getClarityCapture - First observed
getClarityHierarchyPeople - First observed
getClarityProcess - First observed
getClarityProcessLandscape - First observed
getClarityProcessSnapshot - First observed
getClarityProcessTree - First observed
getConnection - First observed
getConnectionCredentials - First observed
getCredential - First observed
getEvalRubrics - First observed
getEvalScores - First observed
getFileContent - First observed
getFileDownloadUrl - First observed
getLegacyClarityProcess - First observed
getNotification - First observed
getNotificationBatch - First observed
getNotificationCounts - First observed
getNotificationFeed - First observed
getOrgInsightsHeadline - First observed
getOrgInsightsMetrics - First observed
getOrgInsightsUsageChart - First observed
getProfile - First observed
getPulseDashboard - First observed
getPulseDashboardAttachmentDownloadUrl - First observed
getPulseDashboardHtml - First observed
getPulseDashboardPdf - First observed
getPulseDashboardVersionHtml - First observed
getQueue - First observed
getRevision - First observed
getRevisionCaseQueueSetup - First observed
getRun - First observed
getRunEvaluation - First observed
getSecret - First observed
getSkillFileContent - First observed
getSkillRevisionFileContent - First observed
getTeam - First observed
getTeamInviteLink - First observed
getUnreadNotificationCount - First observed
inviteOrgMember - First observed
listAgentCaseTriggers - First observed
listAgentFolders - First observed
listAgentMemoryFiles - First observed
listAgentRevisions - First observed
listAgents - First observed
listAgentSchedules - First observed
listAgentSlackBoundWorkspaces - First observed
listAgentSlackTriggers - First observed
listAgentSuggestions - First observed
listAgentTriggers - First observed
listAgentTriggerTypes - First observed
listAvailableClarityProcessLabels - First observed
listCaseLabels - First observed
listCaseRunRecentMessages - First observed
listCaseRuns - First observed
listCases - First observed
listClarityExtraCaptureRequests - First observed
listClarityLandscapeCaptures - First observed
listClarityProcessAssignedLabels - First observed
listClarityProcesses - First observed
listClarityProcessLabels - First observed
listClarityProcessLinks - First observed
listClarityProcessSnapshots - First observed
listClarityProcessSummaries - First observed
listConnections - First observed
listCredentials - First observed
listFiles - First observed
listIntegrations - First observed
listMyOrganizations - First observed
listMyTeams - First observed
listNotifications - First observed
listOrgTeams - First observed
listPluginCatalog - First observed
listPulseDashboardConnections - First observed
listPulseDashboardMessages - First observed
listPulseDashboards - First observed
listPulseDashboardVersions - First observed
listQueueAgents - First observed
listQueueLabels - First observed
listQueues - First observed
listRevisionIntegrationConnections - First observed
listRevisionIntegrationQueues - First observed
listRevisionIntegrations - First observed
listRevisionLogins - First observed
listRevisionSecrets - First observed
listRunMessages - First observed
listRuns - First observed
listSandboxFiles - First observed
listSecrets - First observed
listSkillAssignments - First observed
listSkillFiles - First observed
listSkillRevisionFiles - First observed
listSkillRevisions - First observed
listSkills - First observed
listSystemSkills - First observed
listTeamInvites - First observed
listTeamMembers - First observed
markAllNotificationsRead - First observed
markNotificationBatchRead - First observed
markNotificationRead - First observed
moveAgent - First observed
moveAgentsToFolder - First observed
movePulseDashboard - First observed
pinRevisionIntegrationConnection - First observed
postRunMessage - First observed
previewAgentCaseTriggerConflicts - First observed
probeMcpServer - First observed
promoteRevision - First observed
promoteSkillRevision - First observed
proposeClarityLandscapeProcess - First observed
publishPulseDashboard - First observed
refreshPulseDashboard - First observed
rejectAgentSuggestion - First observed
removeRevisionIntegration - First observed
removeTeamMember - First observed
renameFile - First observed
replaceEvalRubrics - First observed
replaceRevisionIntegrationQueues - First observed
respondToHumanRequest - First observed
restorePulseDashboardVersion - First observed
searchCases - First observed
sendPulseDashboardMessage - First observed
sendTeamInviteEmail - First observed
setClarityLandscapeNodePlacement - First observed
setClarityLandscapePriorities - First observed
startNativeOAuth - First observed
startRun - First observed
stopPulseDashboardMessage - First observed
stopRun - First observed
unlinkCaseLabels - First observed
unlinkClarityProcessLabels - First observed
unpinRevisionIntegrationConnection - First observed
updateAgent - First observed
updateAgentCaseTrigger - First observed
updateAgentFolder - First observed
updateCase - First observed
updateClarityLandscapeNode - First observed
updateClarityProcessLabel - First observed
updateClarityProcessLink - First observed
updateConnection - First observed
updateCredential - First observed
updateEvalRubric - First observed
updateFileContent - First observed
updatePulseDashboard - First observed
updateQueue - First observed
updateQueueLabel - First observed
updateRevision - First observed
updateSchedule - First observed
updateSecret - First observed
updateSkillFile - First observed
updateSkillRevision - First observed
updateSkillRevisionFile - First observed
updateSlackTrigger - First observed
updateTeamInvite - First observed
updateTeamMemberRole - First observed
uploadSandboxFile - First observed
upsertAgentTrigger
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user, then choose Claim with GitHub. An organization namespace such asio.github.acme/serveralso needs that organization to have installed the Glama AI GitHub App and approved its permissions, because GitHub discloses organization membership only to apps it has installed. Use HTTP or DNS when it has not.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Connectors
Runtime AI governance: decision gates, human approval, hash-chained audit, compliance mapping.
Human-in-the-loop review and approval for AI agents. Audit trail, approval policies, native MCP.
Connect, monitor, and control AI agents — tasks, approvals, schedules, and governance.
Governance runtime for compliance: verified, human-approved writes to a tamper-evident record.
Related MCP Servers
- AlicenseAqualityCmaintenanceProvides four MCP servers for retail/CPG operations (ERP, supplier network, email, spreadsheet) with a staged-write safety model that requires human approval for all mutations.11Apache 2.0
- FlicenseNot gradedqualityCmaintenanceEnables AI agents to securely call enterprise MCP tools with tenant-scoped RBAC, human approvals, audit logging, and multi-tool workflows across customer, order, document, and ticket data.-
- FlicenseNot gradedqualityBmaintenanceEnables AI agents to investigate and resolve operational exceptions across orders, payments, inventory, and fulfillment through a multi-system truth and guarded actions.-
- AlicenseAqualityBmaintenanceEnables AI agents to safely inspect and execute version-controlled operational runbooks with policy checks, dry-run planning, and out-of-band approvals.3MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.
TDQS
Despite detailed descriptions, many tool names are highly ambiguous, with multiple tools covering the same conceptual actions (e.g., acceptClarityCaptureSuggestion vs. acceptClarityTeamAssignmentSuggestion, or the many deleteClarity*Interview tools). The set is so large that distinguishing between, say, listClarityFolders, listClarityProcesses, and listClarityProcessSummaries requires reading deep into descriptions, reducing agent selection accuracy.
The naming convention is predominantly verb_noun (e.g., createClarityProcess, listAgents, deleteQueue), and is remarkably consistent across the 316 tools. There are only minor deviations, such as 'fileSuggestedClarityProcesses' (verb + adjective noun) and 'bulkUpdateCasePriority' (where 'bulk' could be seen as a prefix), but overall the pattern holds strongly.
With 316 tools, this server is extremely oversized for any single agent to manage effectively. The massive number of tools suggests poor modularization—many of these tools likely belong in separate, smaller servers focused on specific domains (e.g., Clarity, Pulse, Agent management). The cognitive load for an agent to choose from 316 options is very high, leading to frequent misselection.
The tool surface covers an extraordinarily wide range of operations across the Duvo platform: agents, runs, cases, queues, Clarity processes, skills, integrations, notifications, teams, and more. Most resource types have full CRUD and lifecycle management. Notable minor gaps exist (e.g., no tools for managing specific notification batch severities dynamically, and some interview management is missing batch operations), but for the platform's scope, coverage is impressively thorough.