Skip to main content
Glama

Stride — AI software delivery platform

Server Details

Your team's stories, acceptance criteria, designs and docs, for coding agents. Sign in with OAuth.

Ownership verified
Status
Healthy
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
Newlight-Solutions/stride-plugins
GitHub Stars
0

TDQS

A3.7/5.0

Scored across 131 tools

Disambiguation4/5

Purpose boundaries are mostly clear, and descriptions actively steer between look-alikes such as get_story vs get_story_context, search_stories vs list_stories, and update_story vs update_story_status. Still, the 131-tool surface creates several near-overlaps—create_test_case/create_test_case_from_ac, assign_story/update_story/bulk_update_stories, and many list/get/restore clusters—so selection is not completely frictionless.

Naming Consistency4/5

Nearly all tools follow a predictable stride.<verb>_<noun> snake_case pattern with common verbs like list, get, create, update, delete, restore, and run. Minor deviations such as whoami, next_task, start_story_work, and a few compound noun phrases are readable but slightly break the pattern.

Tool Count1/5

131 tools is an extreme surface for a single MCP server, far beyond the well-scoped 3–15 range. Even for a broad delivery platform spanning Modernize, Optimize, Design, QA, and core planning, this count is likely overwhelming for agents to navigate efficiently.

Completeness4/5

Core delivery domains have strong lifecycle coverage: stories, sprints, epics, releases, labels, defects, test cases/suites/runs, documents, comments, attachments, and cross-links all expose create/read/update/delete or restore paths. Gaps remain around project creation/update, test plans, and update/refine operations for diagrams and processes, but most agent workflows have a workaround.

Available Tools

131 tools
stride.add_project_memberAdd project memberA
Idempotent
Inspect

Give a workspace member access to a Stride project at a role (OWNER, EDITOR, or VIEWER; defaults to EDITOR). Projects are invite-only by default, so this is what lets someone open the project, be assigned work in it, and be @-mentioned there. Idempotent — re-running with a different role changes the role.

NameRequiredDescriptionDefault
roleNoProject role to grant. Defaults to EDITOR.
memberYesWorkspace member — user UUID or email address.
projectIdYesProject UUID.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare idempotentHint=true, destructiveHint=false and openWorldHint=false, so the description is not carrying the safety burden. It still adds genuine value by spelling out the access consequences, the default role, and the role-change-on-rerun behavior. It omits who is permitted to grant OWNER (privilege escalation concerns), which would matter for a permission-granting tool.

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

Conciseness5/5

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

Three sentences, each front-loaded with its most decision-relevant fact: the action and role set first, the practical meaning second, the idempotency contract last. No filler and nothing buried.

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

Completeness4/5

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

For a three-parameter mutation with full schema coverage and annotations covering safety and idempotency, the description supplies what the structured fields cannot: why the tool exists and what it unlocks. Only the return value / error cases (unknown member, insufficient permission) are unaddressed, and there is no output schema to defer to.

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

Parameters3/5

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

Schema description coverage is 100% and already documents projectId, member (UUID or email), and the role enum with its EDITOR default. The description's restatement of the role values and default duplicates the schema rather than adding semantics. Baseline 3 applies since the schema does the heavy lifting.

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

Purpose5/5

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

States a specific verb (give access / add member), the resource (Stride project), and the scope of the grant (role: OWNER/EDITOR/VIEWER with EDITOR default). It also explains the concrete effect — opening the project, being assigned work, being @-mentioned — which distinguishes it from the many story/document siblings.

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

Usage Guidelines4/5

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

Gives clear context for when this tool is needed (projects are invite-only by default, so this is the mechanism that grants entry) and an explicit idempotency rule covering the re-invocation case. It does not name the neighboring alternatives stride.update_project_member_role or stride.remove_project_member, which is a real gap given how close the former is.

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

stride.append_to_documentAppend to documentAInspect

Append markdown to the END of an existing Library document, keeping its current content. Required: documentId, markdown. Use this to add a section (e.g. action items, a new dated entry) without rewriting the whole doc.

NameRequiredDescriptionDefault
markdownYesMarkdown to append to the end of the document.
documentIdYesThe document UUID.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare non-read-only, non-destructive, non-idempotent, so the safety bar is lower. The description still adds real value by stating the additive semantics — existing content is preserved and new content goes at the end — which is the key differentiator from a full rewrite. It does not warn that repeated calls will duplicate content or what happens if documentId is unknown.

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

Conciseness5/5

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

Two tight sentences with the mutation and its scope front-loaded, followed by required inputs and a concrete use case. No filler.

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

Completeness4/5

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

For a two-parameter write tool with full schema coverage and safety annotations, this covers what an agent needs to select and call it. The only gap is return behavior — no output schema and no statement of what comes back or whether the appended content is echoed.

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

Parameters3/5

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

Schema description coverage is 100%, with both parameters documented including the 200k maxLength, so the baseline is 3. The description only restates the required parameter names, adding no format or syntax detail beyond the schema.

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

Purpose5/5

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

States a specific verb and resource ('Append markdown to the END of an existing Library document') and pins the scope with 'END' plus 'keeping its current content'. This cleanly distinguishes it from siblings like update_document, create_document, and get_document.

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

Usage Guidelines4/5

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

Gives a concrete usage trigger: adding a section such as action items or a dated entry 'without rewriting the whole doc'. That implicitly routes the agent away from update_document, but it never names the alternative explicitly or states 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.

stride.assign_storyAssign storyA
Idempotent
Inspect

Assign or unassign a story (identify it by ticket key like "ORB-526" or UUID). Pass assigneeId (a workspace member UUID) to assign, or assigneeId=null to clear the assignee. Conflict-guarded — rejected if a human edited the story after your last read (pass force:true, only with the human's explicit approval, to overwrite it). For broader field edits use stride.update_story.

NameRequiredDescriptionDefault
forceNoOverride a HUMAN_EDIT_AFTER_AGENT_SYNC conflict, overwriting the human's newer edit. Set true ONLY when the human has explicitly approved overwriting their change — the override is audit-logged.
storyIdYesStory ticket key like "ORB-526" (preferred) or a Stride UUID.
assigneeIdYesWorkspace member UUID to assign (ids from stride.list_project_members — never the agent's own bot user, which cannot hold assignments), or null to unassign.

TDQS

A4.6/5.0
Behavior5/5

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

Goes well past the annotations: discloses the conflict guard (rejection when a human edited the story after the agent's last read), names the conflict class implicitly, states that force overwrites a human's newer edit, and that the override is audit-logged. This is exactly the kind of risk context an agent needs before mutating shared state and that annotations alone cannot convey.

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

Conciseness4/5

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

Four tight sentences, front-loaded with the action then the identifier guidance, then the risk, then the alternative. Minor redundancy with the storyId/assigneeId schema text (ticket key example repeats verbatim), but no wasted sentences.

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

Completeness5/5

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

For a non-destructive, idempotent mutation with only three parameters and no output schema, the description covers invocation, both modes, the conflict/override path, and the sibling alternative. Nothing an agent needs in order to call it safely is missing.

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

Parameters3/5

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

Schema coverage is 100% and already documents storyId formats, assigneeId null semantics, the bot-user exclusion, and the force/audit-log caveat. The description restates the same contract rather than adding format or constraint detail beyond it, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb pair (assign/unassign) against a specific resource (story), gives the two accepted identifiers, and explicitly routes broader edits to stride.update_story. An agent can distinguish this from update_story and bulk_update_stories without opening a schema.

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

Usage Guidelines5/5

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

Covers both directions of use (assigneeId to assign, null to clear), the prerequisite for the force path (human's explicit approval), and names the sibling to use for broader field edits. When-to-use and when-not-to-use are both present.

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

stride.bulk_update_storiesBulk update storiesA
DestructiveIdempotent
Inspect

Update up to 50 stories in one call. Supports status, priority, assigneeId, sprintId, epicId, storyPoints, dueDate (all single-value), and labels with { mode: "add"|"remove"|"replace", labels: string[] }. status accepts a category (TODO/IN_PROGRESS/IN_REVIEW/DONE — works across projects) OR a board column name from stride.list_workflow_stages (column names are project-specific, so a name requires the batch to target ONE project). Conflict-checked per row; human-edited rows are skipped and recorded in SyncConflict — pass force:true (only with the human's explicit approval) to overwrite them instead. storyIds may be ticket keys (e.g. "ORB-526") or UUIDs. Returns applied / skipped / notFound arrays — but a ticket key that resolves to nothing rejects the WHOLE call before any write (soft error), and so does any target project the key cannot reach; only ids that parse but match no live story land in notFound. Verify keys with stride.get_story first when unsure.

NameRequiredDescriptionDefault
forceNoOverride HUMAN_EDIT_AFTER_AGENT_SYNC conflicts, overwriting human-edited rows instead of skipping them. Set true ONLY when the human has explicitly approved overwriting their changes — each override is audit-logged.
updatesYes
storyIdsYesUp to 50 stories — ticket keys like "ORB-526" or Stride UUIDs (mixed is fine).

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the destructive/idempotent annotations, it discloses the conflict model (per-row conflict check, human-edited rows skipped and recorded in SyncConflict), the audit-logged override path, and the crucial failure semantics: an unresolvable ticket key rejects the whole call before any write, only parseable-but-dead ids land in notFound. This is exactly the behavioral context annotations cannot convey.

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

Conciseness4/5

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

Front-loaded with the core action and scoped fields before the edge cases. The later sentences are dense, run-on, and dash-laden (the notFound/soft-error sentence especially), which slightly impedes scanning, but nothing is filler.

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

Completeness5/5

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

For a destructive, nested-parameter batch mutation with no output schema, the description covers input formats, conflict handling, force semantics, partial-success vs. rejection behavior, and return arrays. An agent has everything needed to call it correctly and interpret the result.

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

Parameters5/5

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

Schema coverage is 67%, and the description closes the remaining gaps rather than repeating it: labels {mode, labels[]} semantics, the project-specificity constraint on status column names, the mixed ticket-key/UUID allowance for storyIds, and the all-or-nothing behavior tied to key resolution. It adds real meaning beyond the schema's per-field text.

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

Purpose5/5

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

Opens with a specific verb+resource+scope: 'Update up to 50 stories in one call', which immediately separates it from stride.update_story (single) and stride.update_story_status. It then enumerates exactly which fields are batch-updatable, so the agent knows the tool's surface 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.

Usage Guidelines5/5

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

Gives explicit conditions rather than vague context: status may be a category or a column name from stride.list_workflow_stages, and a column name requires a single-project batch. It also states when to pass force (only with explicit human approval) and advises verifying keys with stride.get_story first when unsure — genuine routing guidance, not just a restatement.

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

stride.create_commentCreate commentAInspect

Post a comment on a story, artifact, or diagram. Use this to record progress, ask questions, or flag blockers. Accepts an optional parentId to thread under an existing comment. Comments are attributed to the integration's agent bot user so the activity feed shows the agent name and mark (not a human owner), and tagged with the runtime that wrote them (externalSource) for audit.

NameRequiredDescriptionDefault
contentYes
entityIdYesUUID of the entity — or, for a story, its ticket key like "ORB-526".
parentIdNoOptional UUID of a parent comment to reply to.
entityTypeYes

TDQS

A3.7/5.0
Behavior4/5

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

Goes well beyond the annotations: it discloses that comments are attributed to the integration's agent bot user (not a human owner), that the activity feed shows the agent name/mark, and that entries are tagged with the runtime via externalSource for audit. That is exactly the kind of side-effect provenance an agent cannot get from readOnlyHint/destructiveHint alone. Missing only what happens on failure 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.

Conciseness4/5

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

Front-loaded with the action, then usage, then the threading parameter, then attribution behavior — each sentence carries distinct information. Slightly over-condensed in the final clause ('shows the agent name and mark'), and the parentId sentence partly restates the schema.

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

Completeness4/5

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

With no output schema, the one real gap is that the description never says the response returns the created comment (and its id), which an agent needs to chain threaded replies. Otherwise complete for a 4-parameter mutation whose annotations already declare the safety profile.

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

Parameters3/5

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

Schema coverage is 50% (content and entityType are undocumented in-schema). The description explains parentId's threading behavior and frames content's purpose, but adds nothing about the 16,000-character limit, the ORB-526 ticket-key form of entityId, or the process/defect entity types, so it only partially compensates.

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

Purpose4/5

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

States a specific verb and resource ('Post a comment') and names the target entities, which distinguishes it cleanly from update_comment, delete_comment and list_comments. It is slightly incomplete: the schema's entityType enum also allows 'process' and 'defect', which the description never mentions, so an agent reading only prose may not realize those targets exist.

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

Usage Guidelines3/5

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

'Use this to record progress, ask questions, or flag blockers' gives intent-level context for the content, but never says when to prefer update_comment or toggle_reaction over creating a new comment, nor any prerequisites (e.g. write access to the entity). Usage is implied rather than prescribed.

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

stride.create_defectCreate defectAInspect

File a new defect in a Stride project. Optional storyId (ticket key like "ORB-526" or UUID) / testCaseId / assigneeId — all cross-checked to belong to the same project / workspace, and echoed back in the receipt. Defaults: severity=MEDIUM, status=OPEN.

NameRequiredDescriptionDefault
titleYes
statusNoOPEN
storyIdNoStory ticket key like "ORB-526" or UUID (must be in the same project).
severityNoMEDIUM
projectIdYes
assigneeIdNo
testCaseIdNo
descriptionNo

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare the write/safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false), so the bar is lower, and the description still adds real behavior: storyId/testCaseId/assigneeId are cross-checked to belong to the same project/workspace and echoed back in the receipt. It does not state what happens on validation failure or what error surfaces, which keeps it at 4.

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

Conciseness4/5

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

Two sentences, no filler, core action front-loaded. The second sentence is dense and telegraphic (slash-separated optional params) but every clause carries information the agent needs.

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

Completeness3/5

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

For an 8-parameter mutation tool with no output schema, the description covers the association/validation semantics and defaults but omits required-field expectations for title and projectId and any notion of what the receipt contains beyond the echoed IDs. Adequate but with clear gaps given the schema's low documentation coverage.

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

Parameters3/5

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

Schema description coverage is only 13%, so the description must carry the burden; it partially does by explaining storyId accepts a ticket key like "ORB-526" or UUID and that testCaseId/assigneeId are project-scoped, plus the defaults for severity and status. It says nothing about title (300-char limit), projectId, or description (64k limit), leaving half the parameters unexplained anywhere.

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

Purpose4/5

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

States a specific verb+resource: 'File a new defect in a Stride project.' It is clearly distinguishable from create_story, create_test_case, or update_defect by the resource named. It stops short of explicitly contrasting with any sibling, so 4 rather than 5.

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

Usage Guidelines3/5

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

Usage is implied (this is the way to file a defect) and defaults are noted, but there is no explicit when-to-use/when-not guidance, no statement about when a defect should be a test-case failure vs. a standalone defect, and no mention of alternatives like update_defect or restore_defect.

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

stride.create_documentCreate documentAInspect

Create a Library document from markdown (meeting notes, release notes, retrospectives, PRDs, status updates, summaries, etc.). Required: title, markdown (the body). Optional: docType — one of meeting-notes, sprint-retro, one-on-one, project-plan, rfc, arch-review, prd, release-notes, incident, post-mortem, onboarding, status-update, brainstorm, vision-doc, general (or any label; defaults to "general"). It saves drafted content straight into the Library, so nothing has to be pasted in by hand. Returns the new document id + URL.

NameRequiredDescriptionDefault
titleYesA clear, dated title, e.g. "Sprint Planning — June 4".
docTypeNoDocument type for Library labelling/filtering.
markdownYesThe document body in markdown.
projectIdYesProject UUID (injected — do not set).

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare this is a non-readonly, non-destructive, non-idempotent write, and the description usefully adds the return payload ('new document id + URL') plus the docType default of 'general'. It still omits the practically important facts for a non-idempotent create: whether retrying produces duplicates, and whether project access is required — information annotations cannot carry.

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

Conciseness4/5

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

The purpose and required inputs are front-loaded in the first sentence, and the return value is stated last where it belongs. The long inline enumerations of content types and docType values are somewhat padded given the enum already exists in the schema.

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

Completeness4/5

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

There is no output schema, and the description compensates by naming the return value (id + URL). Required inputs, the optional docType with its default, and the markdown body are all covered; only the injected projectId and retry/duplication behavior are unaddressed.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters are already documented, and the description's restatement of title/markdown adds little. One useful addition is the docType default ('defaults to "general"'), but its claim that docType can be 'any label' conflicts with the schema's closed enum, which muddies rather than clarifies the parameter.

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

Purpose4/5

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

States a specific verb and resource ('Create a Library document from markdown') and enumerates the kinds of content it is meant for, so the agent knows exactly what object is produced. It does not name the write-path siblings (append_to_document, update_document) that an agent might confuse this with, so it falls short of 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.

Usage Guidelines3/5

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

Usage is implied by the examples ('meeting notes, release notes, retrospectives, PRDs...') and by 'saves drafted content straight into the Library', which tells the agent this is for publishing already-drafted markdown. However there is no explicit when-not guidance and no routing to append_to_document for existing documents or update_document for edits.

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

stride.create_epicCreate epicAInspect

Create a new epic (an Artifact with artifactType=EPIC) in the given project. Default status is DRAFT. Description maps to the artifact content field. Attributed to the agent bot user; fires an EPIC_CREATED activity event.

NameRequiredDescriptionDefault
nameYes
projectIdYesUUID of the project.
descriptionNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare non-readOnly, non-destructive, non-idempotent, closed-world, so the safety profile is covered. The description adds genuinely useful behavior an agent could not get elsewhere: default status DRAFT, authorship by the agent bot user, and emission of an EPIC_CREATED activity event — side effects worth knowing about.

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

Conciseness5/5

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

Three short sentences, front-loaded with the create action, then defaults and attribution. Every clause carries distinct information: entity type, default status, field mapping, actor, and event side effect.

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

Completeness4/5

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

For a three-parameter mutation with no output schema, the description covers defaults, authorship, and side effects, which is most of what an agent needs. It omits error/duplicate-name behavior and what the response contains, so not fully complete but solid.

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

Parameters3/5

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

Schema coverage is only 33%, so the description has to carry weight; it does explain that 'description' maps to the artifact content field and reframes projectId as 'the given project'. However it says nothing about the name parameter's role or the length limits beyond what the schema already encodes, leaving one gap.

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

Purpose5/5

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

States a specific verb and resource and pins down the underlying entity ('an Artifact with artifactType=EPIC'), which separates it cleanly from siblings like create_story, create_defect, create_test_case. No ambiguity about what is being produced.

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

Usage Guidelines3/5

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

Scope is implicit: it creates an epic 'in the given project', which implies project membership is required, but there is no explicit when-to-use-this-vs-another statement (e.g. epic vs story vs defect). Usage is inferable from the name and first sentence rather than stated.

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

stride.create_labelCreate labelAInspect

Create a project-scoped label (id, name, color). Color must be a hex string like #6B7280 (default applied if omitted). Returns DUPLICATE_LABEL when the name already exists in the project.

NameRequiredDescriptionDefault
nameYes
colorNoHex color like #6B7280; defaults to neutral gray if omitted.
projectIdYesUUID of the project.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false and destructiveHint=false, so the safety profile is covered. The description adds real value beyond that: it discloses the DUPLICATE_LABEL failure mode and the default-color fallback, which an agent cannot get 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.

Conciseness5/5

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

One tight sentence with the core action front-loaded, then defaults and error semantics in descending order of importance. No filler.

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

Completeness4/5

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

For a mutation tool with no output schema and no annotations covering failure modes, the description covers creation scope, defaulting, and the duplicate error. It does not say what is returned on success (the created label id), a minor remaining gap.

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

Parameters4/5

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

Schema coverage is 67% and the description closes much of the gap: color format and default are restated concretely, and it clarifies that name uniqueness is project-scoped. projectId's UUID role is left to the schema, which is reasonable.

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

Purpose4/5

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

States a specific verb (Create) and resource (label) plus its scope (project-scoped), and enumerates the fields involved (id, name, color). It does not explicitly contrast itself with update_label or list_labels, but the resource naming makes it readily distinguishable from 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.

Usage Guidelines3/5

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

There is no explicit 'use this when...' or named alternative, though the DUPLICATE_LABEL note implies an existence-check pattern and steers behavior. Usage is inferable 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.

stride.create_quality_gateCreate quality gateAInspect

Create a quality gate in a Stride project. Required: projectId, name, criteria (array of { type, threshold, enabled? }; types: pass_rate, parity_pass_rate, max_critical_defects, min_test_coverage — see the criteria property for units). Optional: gateType (sprint|release|test_suite|process) plus the matching target id, validated against the project.

NameRequiredDescriptionDefault
nameYes
criteriaYesCriteria the /check evaluator scores. Preferred: an array of { type, threshold, enabled? }. Types and units: pass_rate (percent 0-100 of executed results that passed, >= threshold), parity_pass_rate (percent 0-100 of behavioural-parity links passing, >= threshold; fails closed when unmeasured), max_critical_defects (count of open CRITICAL defects, <= threshold), min_test_coverage (percent 0-100 of in-scope stories/cases with a live test, >= threshold). An unknown type never passes, and so does a criterion without a threshold. A bare object is stored verbatim for legacy callers.
gateTypeNo
sprintIdNoSprint UUID (must be in same project).
processIdNoProcess-definition UUID (must be in same project).
projectIdYesProject UUID.
releaseIdNoRelease UUID (must be in same project).
testSuiteIdNoTest-suite UUID (must be in same project).

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false and destructiveHint=false, covering the safety profile. The description adds the project-scoped validation constraint on target ids, but says nothing about duplicate names, what is persisted, or permissions, so it only partially extends structured data.

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

Conciseness5/5

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

Two tightly packed sentences: creation context first, then required fields, then optional fields and their constraint. No filler or repetition.

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

Completeness4/5

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

For an 8-parameter mutation with no output schema, the description covers the required/optional structure and the key validation rule. It omits any indication of what is returned (e.g., the new gate id) and behavior on duplicate names, which leaves a small but real gap for an agent.

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

Parameters3/5

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

It summarizes the required/optional split and lists the four criterion types, but explicitly defers units to the schema ("see the criteria property for units"), which already documents them in detail. With 75% schema coverage, this is baseline behavior with modest added value from the "matching target id" pairing rule.

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

Purpose4/5

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

States a specific verb and resource ("Create a quality gate in a Stride project") that clearly distinguishes it from update_quality_gate, get_quality_gate and run_quality_gate_check. It doesn't explicitly name those siblings, but the create verb makes the boundary obvious.

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

Usage Guidelines3/5

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

It implies creation context and notes that the gateType target id is "validated against the project", which is a useful precondition. It never says when to use this versus update_quality_gate or when a gate is inappropriate, so usage is only implied.

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

stride.create_releaseCreate releaseAInspect

Create a new release in a Stride project. Required: projectId, name, version. Optional: status (default PLANNED), targetDate (ISO datetime), description, storyIds (ticket keys like "ORB-526" or UUIDs; must belong to the same project). Cross-project story ids are rejected for safety.

NameRequiredDescriptionDefault
nameYes
statusNoPLANNED
versionYes
storyIdsNoStories to attach — ticket keys like "ORB-526" or UUIDs (must be in the same project).
projectIdYesProject UUID.
targetDateNoDate (YYYY-MM-DD) or full ISO datetime; stored as midnight UTC.
descriptionNo

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare the tool as a non-idempotent, non-destructive write, so the description only needs to add context — and it does: status defaults to PLANNED, targetDate is normalized to midnight UTC, and cross-project story ids are rejected 'for safety'. That normalization and validation behavior is real information the agent could not infer 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.

Conciseness4/5

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

Three tight sentences: purpose first, then required/optional inventory, then the safety constraint. No filler, though the required/optional enumeration is somewhat redundant with the schema's own required list.

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

Completeness3/5

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

With seven parameters and no output schema, the description leaves the agent unsure what a successful call returns (created release id? the full object?) and silent on failure behavior other than the cross-project case. For a mutation tool of this complexity, that leaves a meaningful gap, though the core creation contract is adequately covered.

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

Parameters3/5

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

Schema coverage is only 43%, so the description must carry weight; it restates the three required fields, the PLANNED default, the ISO datetime format for targetDate, and the ticket-key/UUID acceptance for storyIds. However, it omits the schema's length and count bounds (name maxLength 200, version maxLength 100, description maxLength 64000, storyIds maxItems 500) and merely echoes the existing storyIds and targetDate property descriptions.

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

Purpose4/5

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

The description opens with a specific verb and resource ('Create a new release in a Stride project'), which cleanly separates it from siblings like create_sprint, create_story, or update_release. It never explicitly names an alternative, but the resource is unambiguous enough that an agent won't confuse it.

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

Usage Guidelines3/5

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

It lists required and optional parameters but gives no guidance on when a new release should be created versus reusing an existing one via list_releases or modifying one via update_release. The only conditional logic offered is the cross-project rejection rule, which is a validation constraint rather than usage routing.

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

stride.create_sprintCreate sprintAInspect

Create a new sprint in a Stride project. Required: projectId, name. Optional: startDate (ISO8601), endDate (ISO8601), goal. Sprint is created in PLANNING status; use stride.transition_sprint to start it.

NameRequiredDescriptionDefault
goalNoSprint goal.
nameYesDisplay name.
endDateNoDate (YYYY-MM-DD) or full ISO datetime; stored as midnight UTC. Must be on or after startDate.
projectIdYesProject UUID.
startDateNoDate (YYYY-MM-DD) or full ISO datetime; stored as midnight UTC. Optional.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly=false, destructive=false, idempotent=false and openWorld=false, so the write profile is covered. The description adds non-obvious state information — the sprint lands in PLANNING and requires a separate transition to start — which an agent cannot infer from annotations or schema. It omits what is returned (sprint ID), 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.

Conciseness5/5

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

Three tight sentences: action first, parameter requirements second, lifecycle consequence and next step last. No filler and nothing buried.

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

Completeness4/5

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

Covers creation semantics, required inputs, date constraints and the resulting state, which is nearly everything needed for a non-destructive create with no output schema. The one omission is whether the new sprint's identifier is returned — important since the agent will need it for the recommended transition_sprint call.

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

Parameters3/5

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

Schema description coverage is 100%, so all five parameters are already documented, including the ISO8601/midnight-UTC and endDate>=startDate constraints. The description's required/optional recap and '(ISO8601)' tags largely restate 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.

Purpose5/5

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

States a specific verb and resource ('Create a new sprint') and names the scope ('in a Stride project'), which cleanly distinguishes it from siblings like stride.update_sprint, stride.transition_sprint, and stride.list_sprints. No ambiguity about what the tool produces.

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

Usage Guidelines4/5

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

Explicitly routes the agent to stride.transition_sprint for the follow-up action of starting the sprint, and the PLANNING-status detail implies this is the entry point of the sprint lifecycle. It doesn't address when to prefer update_sprint over creating a new sprint, but the primary lifecycle guidance is present.

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

stride.create_storyCreate storyAInspect

Create a new story in a Stride project. Required: projectId, title. Optional: description, type, priority, status, storyPoints, labels, acceptanceCriteria, sprintId, epicId, assigneeId, parentId (a ticket key like "ORB-526" or UUID). status accepts a category (TODO/IN_PROGRESS/IN_REVIEW/DONE — default TODO) OR a board-column name from stride.list_workflow_stages. Returns the new story's displayId (ticket key) and echoes what was set — the acceptance criteria with their stable ac_ ids, epicId, sprintId, parentId, assigneeId — so no confirm-read is needed. Cross-project ids are rejected.

NameRequiredDescriptionDefault
typeNoSTORY
titleYes
epicIdNoEpic Artifact UUID (must be in same project).
labelsNo
statusNoA category (TODO/IN_PROGRESS/IN_REVIEW/DONE — always valid) OR the exact name of a column from stride.list_workflow_stages.TODO
parentIdNoParent story — ticket key like "ORB-526" or UUID (must be in same project).
priorityNoMEDIUM
sprintIdNoSprint UUID (must be in same project).
projectIdYesProject UUID.
assigneeIdNoWorkspace member UUID.
descriptionNo
storyPointsNo
acceptanceCriteriaNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already signal this is a non-destructive, non-idempotent write. The description adds genuinely useful behavior: it returns the new displayId and echoes accepted fields (AC ids, epic/sprint/parent/assignee) so no confirm-read is needed, and that cross-project ids are rejected. This is real value beyond the annotations.

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

Conciseness4/5

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

Front-loads the core action, then the required/optional split, then behavioral notes on status and return values. Slightly redundant in listing every optional param already visible in the schema, but overall dense and efficient.

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

Completeness4/5

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

For a 13-param write tool with no output schema, the description supplies the return shape (displayId plus echoed fields) and cross-project validation, which are the key missing structured pieces. A few param-level details remain uncovered, but an agent can call it correctly from this.

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

Parameters3/5

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

Schema description coverage is only 46%, so the description must compensate. It clarifies the status category-vs-board-column alternative and the parentId ticket-key/UUID format, but several params (labels, priority, storyPoints, type, acceptanceCriteria) are left to the schema and their self-evident names, leaving the coverage gap only partially closed.

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

Purpose4/5

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

States a specific verb and resource ('Create a new story in a Stride project') and enumerates the fields it configures, so the agent knows exactly what it produces. It does not explicitly distinguish itself from siblings like create_defect, create_epic, or update_story, which leaves some ambiguity for ticket-shape decisions.

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

Usage Guidelines4/5

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

Gives clear operating guidance: required vs optional fields, the status category-or-column rule, and a named alternative (stride.list_workflow_stages) for discovering valid column names. It stops short of explicit when-not-to-use guidance, e.g. against create_defect for bugs or create_epic for epics.

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

stride.create_story_relationCreate story relationAInspect

Create a directed relation between two stories: BLOCKS, DEPENDS_ON, or RELATED_TO. BLOCKS and DEPENDS_ON run a cycle check inside a per-project advisory lock so a concurrent inverse edge is detected reliably. RELATED_TO is symmetric and unrestricted. Both stories must be in the same project.

NameRequiredDescriptionDefault
storyIdYesSource story — ticket key like "ORB-526" or a Stride UUID.
relationTypeYes
targetStoryIdYesTarget story — ticket key or UUID (same project).

TDQS

A3.8/5.0
Behavior4/5

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

Annotations only declare readOnly=false, idempotentHint=false, destructiveHint=false; the description goes well beyond them by disclosing the per-project advisory lock, cycle detection for inverse edges, and the same-project constraint. It does not say what happens on a detected cycle (error vs. silent) or whether duplicate edges are rejected despite the non-idempotent hint.

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

Conciseness5/5

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

Three sentences, front-loaded with what the tool does, then constraint, then behavioral detail — no filler and nothing repeated from the schema.

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

Completeness4/5

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

For a 3-parameter mutation with no output schema, the description covers project scoping, directionality, and concurrency behavior adequately. It stops short of describing failure modes (cycle detected, duplicate edge, unknown story key) that an agent would need to interpret results.

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

Parameters3/5

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

Schema coverage is 67% and the two story parameters already carry descriptions; the description's real contribution is explaining the semantics of each enum value (directed with cycle check vs. symmetric/unrestricted), which the schema does not. Because the schema does most of the work, a 3 baseline with credit for the enum meaning is appropriate.

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

Purpose4/5

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

States a specific verb and resource ('Create a directed relation between two stories') and enumerates the three relation types, so an agent knows exactly what the tool produces. It does not differentiate itself from the nearby create_cross_link or list_story_relations siblings, which keeps it from a 5.

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

Usage Guidelines3/5

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

It gives useful selection context by explaining that BLOCKS/DEPENDS_ON are directed and cycle-checked while RELATED_TO is symmetric and unrestricted, which helps pick a relation type. However, it never says when to use this tool rather than create_cross_link, nor does it mention preconditions such as needing the stories to exist first.

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

stride.create_test_caseCreate test caseAInspect

Create a test case in a Stride project. Required: projectId, title. Optional: storyId (ticket key like "ORB-526" or UUID), suiteId (default: the project's first suite), description, steps (array of { action, expected }), expectedResult, priority (default MEDIUM), type (UNIT|INTEGRATION|E2E|PERFORMANCE|SECURITY|ACCESSIBILITY, default INTEGRATION), status (DRAFT|READY|DEPRECATED, default DRAFT), assigneeId. Cross-project ids are rejected for safety; the receipt echoes suiteId / storyId / assigneeId.

NameRequiredDescriptionDefault
typeNo
stepsNo
titleYes
statusNoDRAFT
storyIdNoStory ticket key like "ORB-526" or UUID (must be in same project).
suiteIdNoTest suite UUID (must be in same project). Omit to use the project's first suite.
priorityNoMEDIUM
projectIdYesProject UUID.
assigneeIdNoWorkspace member UUID.
descriptionNo
expectedResultNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare this is a non-read-only, non-destructive, non-idempotent write, so the safety bar is partly covered. The description adds genuine context beyond them: cross-project ids are rejected for safety, undefined suiteId falls back to the project's first suite, and the receipt echoes suiteId/storyId/assigneeId. It stops short of saying what happens on a repeat call (duplicate vs. dedupe).

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

Conciseness4/5

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

Purpose comes first, then a dense but well-ordered Required/Optional inventory with defaults inline — no filler sentences. It reads as one long block, though every clause carries information.

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

Completeness4/5

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

For an 11-parameter mutation with no output schema, the description covers defaults, validation behavior, and partial return shape, which is most of what an agent needs. Gaps are duplicate-handling semantics, permission/auth expectations, and any routing hint against the sibling create_test_case_from_ac.

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

Parameters5/5

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

Schema description coverage is only 36%, so the description has to carry the load and does: it names every parameter, gives storyId's two accepted formats, explains the suiteId fallback, documents the steps item shape as { action, expected }, and lists the full enums with defaults (including the INTEGRATION default for type, which the schema itself omits).

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

Purpose4/5

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

Opens with a specific verb+resource ("Create a test case in a Stride project") and immediately enumerates the fields it writes, so an agent knows exactly what it produces. It does not, however, distinguish itself from the sibling stride.create_test_case_from_ac, which an agent could easily confuse with it.

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

Usage Guidelines3/5

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

The required/optional split and the defaults (suiteId, priority, type, status) give implicit guidance on what a minimal call looks like. But there is no explicit when-to-use statement, no exclusion of create_test_case_from_ac, and no prerequisites such as permission or project-state requirements.

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

stride.create_test_case_from_acCreate test cases from acceptance criteriaAInspect

Create test cases from a story's acceptance criteria, each linked back to its criterion (relation covers_ac). Required: storyId (ticket key like "OP-12" or UUID) plus exactly one of: acId (ONE criterion), acIds (several, up to 50), or allCriteria: true (every criterion of the story, one call instead of one per criterion). The ac_… ids come back from stride.create_story and stride.get_story (acceptanceCriteria[].id) — no separate get_story_context read is needed. Idempotent per criterion: an already-covered criterion returns its existing case (alreadyExisted) and writes nothing; the multi mode returns a per-criterion receipt (created / alreadyExisted) plus notFound ids. Optional: templateId (a test-case template; its title pattern may use {{acText}} and {{storyTitle}}, and its steps/type/priority/expectedResult are applied), suiteId (defaults to the project's first suite). Without a template the title is "Verify: ", type INTEGRATION, priority MEDIUM, status DRAFT. Use stride.create_test_case when a case should cover a whole story instead.

NameRequiredDescriptionDefault
acIdNoONE acceptance-criterion id (ac_…) from stride.get_story / create_story / get_story_context. Exactly one of acId, acIds, allCriteria.
acIdsNoSeveral criterion ids in one call; per-criterion receipt. Exactly one of acId, acIds, allCriteria.
storyIdYesStory UUID or ticket key (e.g. "OP-12").
suiteIdNoTest suite UUID in the same project; defaults to the first suite.
templateIdNoTest-case template UUID (workspace-shared or same project).
allCriteriaNotrue = every acceptance criterion of the story in one call. Exactly one of acId, acIds, allCriteria.

TDQS

A4.1/5.0
Behavior1/5

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

The description claims 'Idempotent per criterion' and says an already-covered criterion writes nothing, but the annotations declare idempotentHint=false. This is a direct contradiction; despite otherwise useful behavioral details about defaults and receipts, the contradiction forces a 1 under the rules.

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

Conciseness5/5

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

The purpose is front-loaded and the remaining sentences are dense with operational details: required identifiers, mode exclusivity, idempotency behavior, template/default behavior, and sibling routing. There is little filler for a complex tool.

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

Completeness5/5

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

For a six-parameter creation tool with no output schema, the description is unusually complete. It explains how to obtain ac_ ids, what each mode returns, template and suite defaults, creation defaults, and when to use the sibling tool instead.

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

Parameters4/5

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

Schema coverage is already 100%, but the description adds meaningful semantics beyond the schema: acIds is capped at 50, allCriteria creates every criterion in one call, templateId supports title patterns with {{acText}} and {{storyTitle}}, and suiteId defaults to the project's first suite.

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

Purpose5/5

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

The description uses a precise verb and resource: create test cases from a story's acceptance criteria, linked via covers_ac. It explicitly distinguishes itself from stride.create_test_case by saying to use that sibling when a case should cover a whole story instead.

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

Usage Guidelines5/5

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

It states the required storyId and the mutually exclusive selection modes: exactly one of acId, acIds, or allCriteria. It also names the alternative sibling and the condition for choosing it, so an agent can route correctly without inference.

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

stride.create_test_runCreate test runAInspect

Create a test run in a Stride project. Required: projectId, name. Optional: suiteId (must be in same project — when given, the run is pre-seeded with one BLOCKED result per non-deprecated case in the suite), environment, pairKey, status (PLANNED|RUNNING|COMPLETED|ABORTED, default PLANNED). For the normal workflow, create the run as PLANNED, then set completeRun=true on the final stride.record_test_results batch.

NameRequiredDescriptionDefault
nameYes
statusNoPLANNED
pairKeyNoModernize parity: shared key linking a legacy-baseline run to its target run. Post the same suite twice with one pairKey, environment "legacy-baseline" then "target".
suiteIdNoTest suite UUID (must be in same project).
projectIdYesProject UUID.
environmentNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare this is a non-destructive, non-idempotent write, so the description is not carrying the safety burden. It still adds real behavioral value beyond them: the suiteId side effect (pre-seeds one BLOCKED result per non-deprecated case), the PLANNED default, and the constraint that the suite must be in the same project. Return payload and failure modes (e.g., duplicate names) remain undisclosed.

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

Conciseness5/5

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

One dense paragraph, front-loaded with the action, then the required/optional inventory, then the recommended workflow. The parenthetical about pre-seeded results is long but every clause carries distinct information; nothing is redundant restatement of the annotation or title.

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

Completeness4/5

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

For a 6-parameter mutation with no output schema, the description covers the creation contract, defaults, side effects, and follow-up workflow well. The notable gap is that it does not say what is returned (presumably a run ID needed for the subsequent record_test_results call), which forces the agent to discover that at runtime.

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

Parameters4/5

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

Schema coverage is only 50%, so the description has to compensate, and it largely does: it restates the required/optional split, the status enum and default, and the seeding semantics of suiteId that the schema only glosses as 'must be in same project.' The name parameter's meaning and the environment values are left to the schema (environment only explained indirectly through pairKey's description).

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

Purpose4/5

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

The opening sentence gives a specific verb and resource (create a test run in a Stride project) and immediately enumerates required vs optional inputs. It positions itself in a workflow relative to stride.record_test_results, which helps separate it from recording results, but it never explicitly contrasts itself with close siblings like create_test_suite or delete_test_run.

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

Usage Guidelines4/5

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

'For the normal workflow, create the run as PLANNED, then set completeRun=true on the final stride.record_test_results batch' gives concrete guidance on when to create with which status and what comes next. There are no explicit when-not conditions (e.g., when to create with status RUNNING or COMPLETED directly), so it stops short of full when/why-not coverage.

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

stride.create_test_suiteCreate test suiteAInspect

Create a test suite in a Stride project — the container test cases belong to. stride.create_test_case requires a suiteId, so a project with no suites (stride.list_test_suites returns none) needs one created here first. Optional description and category (free-text grouping label). Returns the new suite id. Refuses a duplicate name in the same project.

NameRequiredDescriptionDefault
nameYesSuite name, e.g. "Regression — release gate".
categoryNoOptional free-text grouping label (max 80 chars).
projectIdYesProject UUID.
descriptionNoOptional description of what the suite covers.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover safety properties (readOnly=false, destructive=false, idempotent=false). The description adds useful behavior beyond annotations: duplicate name refusal, returned suite id, and optional categorization. It could say more about error handling but is solid.

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

Conciseness5/5

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

Front-loaded purpose, followed by prerequisite, optional fields, return value, and a key constraint. It is compact and every sentence adds useful information.

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

Completeness5/5

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

Given no output schema, the description explains the return value, the duplicate-name refusal, and the prerequisite relationship. It provides enough context to call the tool correctly without needing extra documentation.

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

Parameters3/5

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

Schema coverage is 100%, so the parameters are fully documented in the schema. The description only restates that description and category are optional and that category is free-text, adding little beyond schema baseline.

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

Purpose5/5

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

States a specific verb and resource ("Create a test suite") and immediately clarifies its role as the container for test cases, distinguishing it from related tools like create_test_case and list_test_suites.

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

Usage Guidelines5/5

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

Explicitly says when to use it: when a project has no suites and create_test_case needs a suiteId. It names list_test_suites as the way to check and makes the prerequisite relationship clear.

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

stride.delete_attachmentDelete attachmentA
DestructiveIdempotent
Inspect

Remove an attachment from a story. Note: does NOT strip inline references from the story description or comment thread (REST endpoint handles that — use it when reference cleanup matters).

NameRequiredDescriptionDefault
storyIdYesStory ticket key like "ORB-526" or a Stride UUID.
attachmentIdYesUUID of the attachment.

TDQS

A3.6/5.0
Behavior3/5

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

The annotations already declare destructiveHint=true and idempotentHint=true, so safety and repeat-call semantics are covered. The description adds one genuinely valuable, non-obvious fact — inline references are not stripped. However it never says whether the deletion is permanent (no restore_attachment sibling exists) or what happens on a missing attachmentId, leaving the irreversible nature implied only by the annotation.

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

Conciseness4/5

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

Two sentences, no filler, with the core action front-loaded ahead of the caveat. The parenthetical aside is slightly dense but earns its place by naming the alternative endpoint.

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

Completeness4/5

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

For a 2-parameter, non-open-world mutation with rich annotations and no output schema, the description supplies the one behavioral subtlety an agent would otherwise get wrong. Only the irreversibility/error behavior is missing.

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

Parameters3/5

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

Schema description coverage is 100% and both parameters (storyId, attachmentId) are well documented with format examples, so the schema carries the load. The description adds no parameter-level meaning, which is acceptable but merits only the baseline.

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

Purpose4/5

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

States a specific verb and resource ('Remove an attachment from a story'), which cleanly separates it from stride.upload_attachment and stride.list_attachments. It stops short of naming those siblings explicitly, so 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.

Usage Guidelines4/5

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

Gives a concrete condition and alternative: use the REST endpoint when inline reference cleanup matters. That is genuine routing guidance. It does not cover prerequisites (permissions, whether the attachment must be listed first) or when-not-to-use relative to in-server alternatives.

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

stride.delete_commentDelete commentA
DestructiveIdempotent
Inspect

Delete an agent-authored comment. Refuses to remove human-authored comments even with OWNER/ADMIN session — moderation stays a human action.

NameRequiredDescriptionDefault
commentIdYesUUID of the comment.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so the description's burden is lower, yet it still discloses a non-obvious server-side guard: deletion is restricted to agent-authored comments regardless of session role. That is exactly the kind of behavior an agent cannot infer from 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.

Conciseness5/5

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

Two tight sentences, no filler; the core action leads and the restriction follows immediately as rationale.

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

Completeness5/5

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

For a one-parameter destructive tool, the description plus annotations cover everything needed: safety profile, idempotency, the authorization guard, and the identity of the target. No output schema exists, but a delete's return value is not decision-relevant here.

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

Parameters3/5

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

The single commentId parameter is documented at 100% schema coverage with its UUID type and meaning. The description adds no further syntax or format guidance beyond the schema, so the baseline of 3 applies.

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

Purpose5/5

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

States a specific verb and resource ("Delete ... comment") plus a scoping qualifier ("agent-authored") that cleanly separates it from update_comment, list_comments, and create_comment in the sibling set. An agent knows exactly which operation this performs.

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

Usage Guidelines4/5

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

Gives an explicit negative condition — refuses human-authored comments even with OWNER/ADMIN — which tells the agent when not to call it and that elevation won't help. It doesn't name a sibling alternative for moderation, but the exclusion is concrete and actionable.

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

stride.delete_defectDelete defectA
DestructiveIdempotent
Inspect

Soft-delete a defect. Sets deletedAt; subsequent calls return ALREADY_DELETED (idempotent — does not refresh the cleanup-cron clock).

NameRequiredDescriptionDefault
defectIdYesUUID of the defect.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare destructiveHint and idempotentHint, so the description is not obligated to restate that — yet it adds real substance beyond them: the record is not physically removed (deletedAt is set), repeat calls yield ALREADY_DELETED, and notably the cleanup-cron clock is not refreshed. That last detail is non-obvious side-effect information an agent could not infer from any structured field.

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

Conciseness5/5

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

Two tight sentences with the core action front-loaded and the idempotency/cron nuance compactly parenthesized. No sentence is filler and nothing is buried.

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

Completeness4/5

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

For a one-parameter mutation with no output schema, the description covers the semantics of the operation and the repeat-call outcome thoroughly. It leaves minor gaps: whether a deleted defect can be recovered (restore_defect) and what happens if the ID is unknown or already deleted beyond the ALREADY_DELETED code.

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

Parameters3/5

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

With a single parameter at 100% schema description coverage, the schema already explains that defectId is the UUID of the defect. The description adds no additional meaning about the parameter (e.g. whether the UUID must reference a non-deleted defect), so the baseline of 3 applies.

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

Purpose5/5

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

States a precise verb and resource ('Soft-delete a defect') and immediately pins down what 'soft' means (sets deletedAt). This distinguishes it from a hard-delete sibling and from update_defect 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.

Usage Guidelines4/5

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

It makes clear this is the reversible/soft removal path and that repeat invocation is safe, which is exactly the usage context an agent needs before deleting. It stops short of naming restore_defect as the undo path or stating prerequisites such as ownership/permission requirements.

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

stride.delete_designDelete designA
DestructiveIdempotent
Inspect

Soft-delete a UI design and its variants (sets deletedAt; recoverable via stride.restore_design). Use to clean up a design generated in error. Cross-links to stories/defects/epics are preserved. Returns a no-op success on an already-deleted row.

NameRequiredDescriptionDefault
designIdYesUUID of the UI design.

TDQS

A4.5/5.0
Behavior5/5

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

Adds substantial context beyond the annotations: it discloses that this is a soft delete setting deletedAt, that the operation is recoverable via stride.restore_design, that cross-links are preserved, and that repeat calls return a no-op success. These details are not inferable from destructiveHint or idempotentHint alone.

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

Conciseness5/5

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

Four compact sentences, each delivering distinct information: operation semantics, recovery path, use case, side effects, and idempotent behavior. No filler or repetition.

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

Completeness5/5

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

For a single-parameter destructive tool with no output schema, the description covers the mutation model, recoverability, preservation of relationships, and repeat-call behavior. Nothing an agent needs in order to call it safely and correctly appears missing.

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

Parameters3/5

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

The single parameter has 100% schema description coverage ('UUID of the UI design'), so the schema already carries the semantics. The description does not add format constraints or edge cases for designId; baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb and resource ('Soft-delete a UI design and its variants') and clarifies the scope includes variants. An agent can distinguish it from sibling delete tools like delete_diagram or delete_document without opening a schema.

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

Usage Guidelines4/5

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

Provides a clear usage context ('Use to clean up a design generated in error') and points to the recovery path (stride.restore_design). It stops short of explicit exclusions or comparisons to sibling delete tools, but the intended scenario is unambiguous.

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

stride.delete_diagramDelete diagramA
DestructiveIdempotent
Inspect

Soft-delete an architecture diagram (sets deletedAt; recoverable via stride.restore_diagram). Use to clean up a diagram generated in error. Returns a no-op success on an already-deleted row.

NameRequiredDescriptionDefault
diagramIdYesUUID of the diagram.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true and idempotentHint=true, but the description adds substantive behavior beyond them: it is a SOFT delete via deletedAt, it is recoverable through stride.restore_diagram, and re-deleting returns a no-op success rather than an error. That is exactly the extra context an agent needs before invoking a destructive tool.

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

Conciseness5/5

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

Three short sentences, front-loaded with the core action and mechanism, followed by the use case and the edge-case behavior. No filler.

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

Completeness5/5

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

For a single-parameter mutation with no output schema, the description covers action semantics, recoverability, and idempotent edge-case behavior, while annotations carry the safety profile. Nothing material to a correct call is missing.

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

Parameters3/5

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

Only one parameter, diagramId, and the schema documents it at 100% coverage ('UUID of the diagram'). The description adds nothing about the identifier format or sourcing, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb+resource ('soft-delete an architecture diagram') and immediately clarifies the mechanism (sets deletedAt) and the counterpart tool (stride.restore_diagram). This separates it cleanly from siblings like delete_design, delete_process, and restore_diagram.

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

Usage Guidelines4/5

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

Gives a concrete use case ('clean up a diagram generated in error') and names the recovery alternative stride.restore_diagram. It does not spell out when not to use it (e.g., diagrams referenced by other artifacts), but the conditional context is clear.

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

stride.delete_documentDelete documentA
DestructiveIdempotent
Inspect

Archive a Library document (meeting notes, PRD, spec, retro…). Removes it from the Library list and from stride.search_documents, but it stays RESTORABLE — a human can bring it back from the archived view. Idempotent on an already-archived document. Permanent purge is deliberately not available to agents.

NameRequiredDescriptionDefault
documentIdYesThe document UUID.

TDQS

A4.5/5.0
Behavior5/5

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

Adds substantial behavior beyond the annotations: the document is removed from the Library list and from stride.search_documents, it remains restorable by a human from an archived view, and the call is idempotent on an already-archived document. This resolves the tension between destructiveHint=true and the soft-delete semantics, which annotations alone could not convey.

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

Conciseness5/5

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

Three short sentences, front-loaded with the action and its real semantics, followed by side effects and the idempotency guarantee. Every sentence carries distinct information; nothing is repeated from the schema or annotations.

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

Completeness5/5

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

For a one-parameter mutation with no output schema, the description covers what is affected (Library listing and search index), reversibility, idempotency, and the unavailability of hard deletion. Nothing an agent needs in order to call it safely is missing.

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

Parameters3/5

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

The schema documents the single documentId parameter at 100% coverage, so parameter meaning is already fully specified by the structured data. The description adds no further detail about the identifier format or resolution, which is acceptable at this coverage level but earns only the baseline.

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

Purpose5/5

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

States a specific verb and resource ('Archive a Library document') and immediately clarifies that the name 'delete' actually means soft-archive, with examples of the document types covered. An agent can distinguish this from sibling delete_* tools and from update_document without opening a schema.

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

Usage Guidelines4/5

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

Gives clear context for use (removing a document from the Library and from search) and an explicit exclusion: permanent purge is not available to agents, so an agent should not look elsewhere for hard deletion. It does not point at sibling tools such as stride.restore_document or update_document as alternatives, which keeps it 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.

stride.delete_epicDelete epicA
DestructiveIdempotent
Inspect

Soft-delete an epic. Atomically sets deletedAt + unlinks dependent stories (epicId → null; stories themselves are not deleted). Idempotent on a tombstoned row.

NameRequiredDescriptionDefault
epicIdYesUUID of the epic.

TDQS

A4.1/5.0
Behavior5/5

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

Goes well beyond the annotations by disclosing exactly what gets written (deletedAt), what cascades (dependent stories have epicId nulled), what is explicitly preserved (stories themselves are not deleted), and that the operation is atomic. The annotation hints destructive/idempotent, but only the description tells the agent the blast radius.

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

Conciseness4/5

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

Three tight sentences with the operation front-loaded and the cascade consequence placed where a reader will see it. No filler; the parenthetical clarifying that stories survive is well placed rather than wasteful.

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

Completeness4/5

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

For a single-parameter mutation with rich annotations and no output schema, the description covers what an agent needs to predict the effect. The only meaningful gap is not saying whether restore_epic can undo the tombstone or how a nonexistent epic is handled.

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

Parameters3/5

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

Schema description coverage is 100% and the single epicId parameter is fully documented in the schema as a UUID. The description's reference to 'epicId' concerns the story field being nulled, not the input, so it adds no parameter syntax or format detail beyond the schema.

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

Purpose5/5

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

States a specific verb and resource ('Soft-delete an epic') and immediately qualifies it as a soft delete, which cleanly separates it from the sibling delete_* tools and points toward restore_epic as the inverse. The verb+resource+modifier combination is unambiguous.

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

Usage Guidelines3/5

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

The description makes the soft-delete nature and idempotency clear, which implies 'use this when you want the epic tombstoned but recoverable,' but it never explicitly names restore_epic or states when to prefer it over other epic operations. Guidance is implied rather than stated.

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

stride.delete_labelDelete labelA
DestructiveIdempotent
Inspect

Delete a Label row (metadata only — does NOT scrub the label name off stories that reference it; story labels are stored as a string array). Use bulk_update_stories with labels.mode=remove to clean up story-side associations.

NameRequiredDescriptionDefault
labelIdYesUUID of the label.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already flag destructiveHint/readOnlyHint/idempotentHint, but the description adds what annotations cannot: the deletion does not scrub the label name from stories because story labels live as a string array. That is precisely the kind of hidden side effect an agent must know before deleting.

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

Conciseness5/5

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

Two sentences, both load-bearing: the first states the action and its key limitation, the second routes to the follow-up tool. No filler or restated name.

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

Completeness5/5

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

For a one-parameter destructive tool this covers everything: what is deleted, what is NOT deleted, and how to do the remaining cleanup. No output schema is needed since deletion has no meaningful return to describe.

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

Parameters4/5

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

Only one parameter (labelId), fully documented in the schema as a UUID, so the description needs no compensation. It adds no extra parameter detail, but none is warranted for a single required ID.

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

Purpose5/5

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

States a concrete verb and resource ('Delete a Label row') and immediately scopes it: metadata only, not the story-side string array. That distinction separates it from the other delete_* siblings and from update_label.

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

Usage Guidelines5/5

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

Explicitly names the alternative path for the adjacent task ('Use bulk_update_stories with labels.mode=remove to clean up story-side associations'), giving the agent a routing rule rather than leaving it to guess which tool handles story labels.

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

stride.delete_processDelete processA
DestructiveIdempotent
Inspect

Soft-delete a BPMN process model (sets deletedAt; recoverable via stride.restore_process). Use to clean up a process generated in error. Returns a no-op success on an already-deleted row.

NameRequiredDescriptionDefault
processIdYesUUID of the process model.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so the description's real contribution is the soft-delete semantics ('sets deletedAt; recoverable'), which the annotations do not convey and which materially changes how an agent reasons about risk. The 'no-op success on an already-deleted row' sentence largely restates idempotentHint=true, so it adds less than the first two clauses.

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

Conciseness5/5

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

Three short sentences with no filler: what it does first, when to use it second, edge-case behavior last. Every clause carries distinct information and the destructive/soft-delete nature is front-loaded.

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

Completeness5/5

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

For a single-parameter delete with no output schema, the description covers the mutation semantics, reversibility, the recovery tool to call next, and the already-deleted edge case. There is nothing an agent needs in order to invoke this correctly that is missing.

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

Parameters3/5

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

Only one parameter (processId) and schema coverage is 100%, with the schema itself describing it as 'UUID of the process model.' The description adds no format hints or validation notes beyond the schema, which is acceptable at this coverage level but is not above baseline.

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

Purpose5/5

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

States a specific verb and resource ('Soft-delete a BPMN process model') and immediately qualifies the scope by naming the recovery sibling stride.restore_process. An agent can tell this apart from stride.list_processes, stride.get_process, and the many other delete_* tools without opening any schema.

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

Usage Guidelines4/5

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

'Use to clean up a process generated in error' gives a concrete selection condition, and the reference to stride.restore_process points at the alternative for the undo case. It stops short of stating when-not to use it (e.g. processes in active sprints or with dependent artifacts), so it is clear context rather than a full routing rule.

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

stride.delete_quality_gateDelete quality gateA
DestructiveIdempotent
Inspect

Permanently delete a quality gate (HARD delete — QualityGate has no soft-delete, so there is no restore). The gate's evaluation-event history is removed with it.

NameRequiredDescriptionDefault
qualityGateIdYesUUID of the quality gate.

TDQS

A4/5.0
Behavior5/5

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

Goes well beyond the destructiveHint annotation: it explicitly says the delete is a HARD delete, that QualityGate has no soft-delete so there is no restore path, and that evaluation-event history is removed as a side effect. That is exactly the consequence an agent needs before mutating.

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

Conciseness5/5

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

Two short sentences, front-loaded with the permanence warning and the cascade effect. Every clause carries information; no filler.

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

Completeness4/5

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

For a single-parameter destructive tool with full annotation coverage and no output schema, the description covers the essentials. Minor gap: no mention of permissions/authorization requirements or what the call returns (e.g., confirmation payload).

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

Parameters3/5

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

Only one parameter, and the schema documents it at 100% coverage ('UUID of the quality gate'). The description adds nothing about the id format or where to obtain it, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb+resource ('Permanently delete a quality gate') and clarifies the scope of deletion down to the evaluation-event history. It doesn't explicitly name a sibling, but the delete semantics distinguish it from update_quality_gate and run_quality_gate_check.

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

Usage Guidelines3/5

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

Usage is only implied by the word 'delete'; there is no explicit when-to-use guidance, no mention of the alternative of disabling/deactivating a gate via update_quality_gate, and no warning about when not to call it.

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

stride.delete_releaseDelete releaseA
DestructiveIdempotent
Inspect

Soft-delete a release (sets deletedAt; recoverable via stride.restore_release). Returns a no-op success on an already-deleted row.

NameRequiredDescriptionDefault
releaseIdYesUUID of the release.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already flag destructiveHint and idempotentHint, but the description goes further: it discloses that the delete is soft (sets deletedAt), that it is recoverable, and that calling on an already-deleted row returns a no-op success. That edge-case behavior is genuinely non-obvious and adds real value beyond the annotations.

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

Conciseness5/5

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

Two tight sentences with zero filler; the soft-delete semantics are front-loaded and the recovery/idempotency notes follow logically.

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

Completeness5/5

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

For a single-parameter mutation with rich annotations and no output schema, the description covers everything an agent needs: what it does, that it's reversible, how to reverse it, and the already-deleted edge case.

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

Parameters3/5

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

Schema coverage is 100% and the single parameter (releaseId UUID) is fully documented in the schema. The description adds no syntax or format detail beyond that, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Soft-delete a release') and immediately clarifies the mechanism (sets deletedAt) versus a hard delete. This cleanly distinguishes it from siblings like stride.restore_release, which it names explicitly.

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

Usage Guidelines4/5

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

Explicitly points to stride.restore_release as the recovery path, giving the agent a clear alternative for undo. It doesn't spell out prerequisites (permissions, whether the release must be in a certain state), so it stops short of full when/when-not guidance.

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

stride.delete_sprintDelete sprintA
DestructiveIdempotent
Inspect

Soft-delete a sprint that has not started yet. ONLY sprints in PLANNING can be deleted — once a sprint goes ACTIVE it can never be deleted, and cancelling does NOT unlock deletion (a CANCELLED sprint is retired but permanent). To retire a running sprint use transition_sprint with to="CANCELLED". Idempotent. Unassigns all stories on the sprint atomically (sprintId set to null); restore_sprint re-assigns the ones still unassigned.

NameRequiredDescriptionDefault
sprintIdYesUUID of the sprint.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only say destructive and idempotent; the description goes far beyond by disclosing that the delete is soft, that it atomically unassigns all stories (sprintId set to null), and that restore only re-assigns stories still unassigned. It also corrects a likely false assumption that cancelling unlocks deletion.

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

Conciseness5/5

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

Four tight sentences, front-loaded with the state-machine precondition, then exclusions, then the side effect. No filler and nothing deferred to the end that an agent needs early.

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

Completeness5/5

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

For a single-parameter destructive tool whose annotations cover safety and idempotency, the description supplies everything needed: eligibility rule, side effects, recovery path, and the alternative for out-of-scope cases. No output schema is needed since the effect is fully described.

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

Parameters4/5

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

Schema coverage is 100% and the single sprintId parameter is fully typed, so the schema carries most of the burden. The description still adds value by constraining the valid domain of that UUID to sprints in PLANNING, which the schema does not express.

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

Purpose5/5

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

States a specific verb ('soft-delete') and resource ('a sprint') plus an explicit scope restriction (must be in PLANNING). An agent can distinguish this from transition_sprint and restore_sprint without opening any schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use (PLANNING sprints), when-not (ACTIVE can never be deleted, CANCELLED is permanent), and names the correct alternative for running sprints: transition_sprint with to="CANCELLED". It also points forward to restore_sprint for recovery.

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

stride.delete_storyDelete storyA
DestructiveIdempotent
Inspect

Soft-delete a story. Sets deletedAt; the nightly cleanup-cron hard-deletes rows older than 7 days. Use stride.restore_story to undo within the grace window. Returns ALREADY_DELETED soft error on a tombstoned row.

NameRequiredDescriptionDefault
storyIdYesStory ticket key like "ORB-526" or a Stride UUID.

TDQS

A4.5/5.0
Behavior5/5

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

Goes well beyond the annotations: sets deletedAt, exposes the nightly cleanup-cron hard-delete after 7 days, and documents the ALREADY_DELETED soft error on tombstoned rows. This is exactly the mutation lifecycle and error behavior an agent needs before calling a destructive tool.

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

Conciseness5/5

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

Four short sentences, each contributing distinct information (soft semantics, grace window, undo path, error code), with the core behavior front-loaded.

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

Completeness5/5

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

For a single-parameter destructive tool with no output schema, the description covers lifecycle, reversibility, timing, and error semantics, leaving nothing material an agent needs unstated.

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

Parameters3/5

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

Schema coverage is 100% and the storyId description already explains the ticket-key/UUID formats, so the schema carries the load. The description adds only the tombstoned-row context, not parameter-level detail, so baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb and resource: 'Soft-delete a story.' This immediately distinguishes it from the other delete_* siblings and from restore_story, and the 'soft' qualifier gives the agent the key semantic difference from a hard delete.

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

Usage Guidelines4/5

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

Explicitly names stride.restore_story as the undo path and the 7-day grace window as the condition for it. It doesn't discuss when to prefer other delete variants, but for a delete tool the alternative that matters (undo) is covered.

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

stride.delete_story_relationDelete story relationA
DestructiveIdempotent
Inspect

Delete a story relation by id. Workspace-scoped via the denormalised projectId. Use stride.list_story_relations to discover relation ids.

NameRequiredDescriptionDefault
relationIdYesRelation UUID.

TDQS

A3.6/5.0
Behavior3/5

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 by structured data. The description adds a workspace-scoping claim, but that claim references a 'denormalised projectId' that is not a parameter in the schema, which is more confusing than clarifying, and it never states whether the deletion is permanent (no restore_story_relation sibling exists).

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

Conciseness4/5

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

Three short sentences, front-loaded with the action, then scope, then the discovery hint. Zero padding, though the middle sentence about projectId adds ambiguity rather than information.

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

Completeness4/5

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

For a single-parameter delete whose annotations already convey destructiveness and idempotency, the description covers purpose, scoping and id discovery. The unverifiable projectId remark is the only loose end, and no output schema or return-value explanation is needed here.

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

Parameters3/5

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

Schema coverage is 100% and the schema already says 'Relation UUID', so the description only needs to add provenance. It does that usefully by naming list_story_relations as the source of the id, which is the baseline-3 level of added value.

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

Purpose4/5

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

States a specific verb and resource ('Delete a story relation by id'), which is unambiguous and distinct from siblings like create_story_relation and delete_cross_link. It does not explicitly contrast with delete_cross_link, so it stops just short 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.

Usage Guidelines4/5

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

Explicitly points to stride.list_story_relations as the way to obtain a valid relation id, which is actionable pre-call guidance. It gives no 'when not to use' condition or note on the absence of an undo/restore counterpart.

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

stride.delete_test_caseDelete test caseA
DestructiveIdempotent
Inspect

Soft-delete a test case. Sets deletedAt; subsequent calls return ALREADY_DELETED (does not refresh the cleanup-cron clock). Restore with stride.restore_test_case.

NameRequiredDescriptionDefault
testCaseIdYesUUID of the test case.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only say destructiveHint=true and idempotentHint=true; the description adds the crucial nuance that deletion is soft (deletedAt), that repeat invocations yield ALREADY_DELETED, and that they don't refresh the cleanup-cron clock. Those details — especially the cron-clock caveat — are non-obvious and materially affect correct invocation.

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

Conciseness5/5

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

Three short sentences, front-loaded with the operation, then the mechanism, then the recovery path. No filler and no repetition of the title.

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

Completeness5/5

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

For a single-parameter soft-delete with no output schema, everything needed is present: semantics, idempotency behavior, error signal, and how to reverse it. Nothing an agent needs in order to call it correctly is missing.

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

Parameters3/5

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

Schema coverage is 100% and there is only one parameter (testCaseId, UUID), so the schema already carries the full burden. The description adds nothing about the parameter's format or source, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb plus resource ('Soft-delete a test case') and immediately disambiguates the flavor of deletion by describing the deletedAt mechanism. An agent can distinguish it from stride.delete_test_run, stride.delete_test_suite, and stride.delete_test_case's own restore path without opening any schema.

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

Usage Guidelines4/5

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

The description names the reverse operation explicitly ('Restore with stride.restore_test_case') and warns that repeat calls return ALREADY_DELETED, which effectively tells the agent not to retry. It stops short of an explicit when-not-to-use statement, so it's clear context rather than a full routing rule.

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

stride.delete_test_runDelete test runA
DestructiveIdempotent
Inspect

PERMANENTLY delete a test run and every result it recorded (HARD delete — TestRun has no soft-delete, so there is no restore). Test cases whose latest verdict came from this run are rolled back to their previous surviving result, or cleared if none remains. Child re-runs survive with their parent link removed.

NameRequiredDescriptionDefault
testRunIdYesUUID of the test run.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only flag destructiveHint=true; the description supplies the consequences an agent actually needs: hard delete with no soft-delete recovery, cascading removal of all recorded results, rollback of test case verdicts to the previous surviving result or clearing when none remains, and child re-runs surviving with the parent link severed.

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

Conciseness5/5

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

Three dense sentences, each earning its place: the irreversibility warning is front-loaded, followed by cascade effects and the least-obvious side effect on child re-runs. No filler or restatement of the tool name.

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

Completeness5/5

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

For a one-parameter destructive tool with no output schema, the description covers everything that affects a safe call: permanence, cascade scope, and downstream state changes. Remaining details (e.g., the empty return payload) are trivial relative to what is disclosed.

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

Parameters3/5

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

Schema coverage is 100% on the single required testRunId (UUID of the test run), so the schema carries the parameter documentation. The description adds no format or lookup guidance for testRunId, making the baseline 3 appropriate.

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

Purpose5/5

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

States a specific verb and resource (delete a test run) plus its full scope (every result it recorded), and 'HARD delete' distinguishes it from any recovery path. An agent can immediately tell this apart from stride.delete_test_case, stride.delete_test_suite, or stride.record_test_results.

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

Usage Guidelines4/5

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

The explicit 'no restore' warning gives clear decision context for when this tool is appropriate versus seemingly similar cleanup, and the sibling list confirms there is no restore_test_run counterpart. It stops short of naming an alternative for agents who merely want to remove individual results rather than the whole run.

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

stride.delete_test_suiteDelete test suiteA
DestructiveIdempotent
Inspect

PERMANENTLY delete a test suite (HARD delete — TestSuite has no soft-delete, so there is no restore). Cascades: every test case in the suite is deleted with all of its results; test runs survive but lose their suite link. A non-empty suite refuses unless you pass force: true — relay the returned counts to the human and get explicit confirmation before you do.

NameRequiredDescriptionDefault
forceNoConfirm the irreversible cascade for a non-empty suite. Set only with explicit human approval.
testSuiteIdYesUUID of the test suite.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare destructiveHint and non-readOnly, and the description adds substantial context beyond them: no soft-delete exists, the cascade deletes all test cases and their results, test runs survive but lose their suite link, and the refusal-then-force flow with returned counts. This is exactly the mutation detail an agent needs before invoking.

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

Conciseness5/5

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

Three sentences, each carrying distinct payload: the irreversibility warning is front-loaded in capitals, followed by cascade consequences, then the force gate. No filler and no repetition of the annotations or schema.

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

Completeness5/5

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

For a destructive two-parameter tool with no output schema, the description covers destruction scope, side effects on related entities, the failure mode, and the escalation path. Even the returned counts are mentioned, so nothing an agent needs to call this safely is missing.

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

Parameters4/5

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

Schema coverage is 100%, so both parameters are documented in structured form and the baseline would be 3. The description adds operational meaning over the schema by framing force as the release valve for a non-empty suite and prescribing a human-confirmation workflow, though it does not describe testSuiteId beyond what the schema says.

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

Purpose5/5

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

States a specific verb and resource ('PERMANENTLY delete a test suite') with an explicit scope qualifier (hard delete, no restore). This immediately distinguishes it from update_test_suite and from the restore_* family of siblings, so an agent need not open a schema to know what it does.

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

Usage Guidelines4/5

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

Gives a clear precondition: a non-empty suite refuses unless force: true is passed, and force requires explicit human confirmation with counts relayed back first. It does not explicitly name a sibling alternative (e.g., delete_test_case for partial cleanup), so it falls short of a full when/when-not routing statement.

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

stride.end_sessionEnd sessionA
Idempotent
Inspect

Closes the current agent execution row at the end of a piece of work, recording how it ended (SUCCEEDED / FAILED) on the audit dashboard. Idempotent — a retry after the session has closed returns the SAME closed session (same executionId, alreadyEnded: true) and changes nothing; it never opens a new one. A session still open 30 minutes after it started is marked TIMED_OUT instead.

NameRequiredDescriptionDefault
errorNoRequired when outcome="failure". Free-form error message.
outcomeNo"success" → status=SUCCEEDED. "failure" → status=FAILED (requires `error`).success
summaryNoOptional one-line summary of what the agent accomplished.

TDQS

A4.5/5.0
Behavior5/5

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

Goes well beyond the annotations: it explains exactly what an idempotent retry returns (same executionId, alreadyEnded: true) and that it never opens a new session, and it discloses the hidden 30-minute auto-TIMED_OUT rule. That timeout behavior is server-side state an agent could not infer from the schema or hints.

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

Conciseness5/5

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

Three sentences, each carrying distinct payload: purpose, idempotency contract, timeout behavior. Front-loaded with the core action and no filler.

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

Completeness5/5

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

With no output schema, the description still tells the agent what comes back (executionId, alreadyEnded flag) and covers the edge cases that matter for a mutation: retries and stale sessions. Nothing needed to call it correctly is missing.

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

Parameters3/5

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

Schema coverage is 100%, so outcome/error/summary semantics are already documented in the schema, including the failure-requires-error rule. The description only restates the outcome→status mapping; it adds no new parameter guidance, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource: "Closes the current agent execution row at the end of a piece of work," plus what it records (SUCCEEDED/FAILED on the audit dashboard). No sibling tool in the list does anything comparable, so the agent can distinguish it immediately.

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

Usage Guidelines4/5

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

"At the end of a piece of work" gives a clear timing/context cue for invocation. It does not name any exclusion or point to a counterpart (e.g. task-completion or next_task flows) that would tell the agent when not to close, 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.

stride.generate_diagramGenerate diagramAInspect

Generate an architecture diagram for a story from its title + description + acceptance criteria. Pick a type (System Context / Container / Component / Deployment / Sequence / Data Flow / ERD / State Machine / BPMN) or pass "AUTO" to let Stride choose. Persists a draft diagram in the Design module and links it to the story. Identify the story by ticket key (e.g. "ORB-526") or UUID. Can take up to ~4 minutes, longer than many MCP clients wait. If it is still running after about 52 seconds this tool answers "still running" with a toolCallId and finishes in the background, saving the result when done. Meanwhile a repeat call for the same story (for a refine, the same option) starts nothing and answers "still running" again; stride.get_tool_call_status follows the run: given that toolCallId and waitSeconds 40 it waits for the run (a 3-minute run takes about 5 calls) and returns the result once it is saved, or says it failed. Cancelling the call before it answers stops the run and saves nothing.

NameRequiredDescriptionDefault
storyIdYesStory ticket key like "ORB-526" (preferred) or a Stride UUID.
diagramTypeNoDiagram type, or "AUTO" (default) to let Stride classify the best fit.
instructionsNoOptional extra guidance (e.g. "focus on the payment flow").

TDQS

A4.3/5.0
Behavior5/5

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

The description adds substantial behavior beyond the annotations: it persists a draft diagram in the Design module, links it to the story, can run for about four minutes, returns "still running" with a toolCallId after roughly 52 seconds, continues in the background, ignores duplicate calls while running, and saves nothing if cancelled. These details are critical for an agent invoking a long-running, non-read-only operation.

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

Conciseness4/5

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

The description is front-loaded with the purpose, then covers the diagram type and story identifier, then the async behavior. It is somewhat long, but nearly every sentence carries operational value for a complex long-running tool; minor tightening is possible but not required.

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

Completeness4/5

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

For a tool with no output schema and complex async behavior, the description is largely complete: it explains persistence, linking, polling, repeated calls, and cancellation outcomes. The main remaining gap is that it does not describe the exact shape of a successful saved result beyond saying it is returned by stride.get_tool_call_status.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents storyId, diagramType, and instructions thoroughly, including the enum values and AUTO default. The description reinforces the ticket-key/UUID format and type selection but does not add meaningful parameter semantics beyond the schema.

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

Purpose5/5

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

The description states a specific verb and resource: it generates an architecture diagram for a story using the story's title, description, and acceptance criteria. The word "architecture" and the diagram-type list distinguish it from sibling generation tools such as stride.generate_process and stride.generate_ui_design.

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

Usage Guidelines4/5

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

It gives clear usage context: identify the story by ticket key or UUID, choose a diagram type or AUTO, and optionally pass extra instructions. It also explains the async continuation path via stride.get_tool_call_status and repeat-call behavior, though it does not explicitly compare itself against the other generate_* siblings.

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

stride.generate_processGenerate processAInspect

Generate a BPMN business process for a story from its title + description + acceptance criteria. Models the flow (start, tasks, decisions, end), validates it with bpmnlint, and persists a draft process in the Optimize module linked to the story. Identify the story by ticket key (e.g. "ORB-526") or UUID. Optionally pass detail ("happy" | "full") and free-text guidance. Can take up to ~4 minutes, longer than many MCP clients wait. If it is still running after about 52 seconds this tool answers "still running" with a toolCallId and finishes in the background, saving the result when done. Meanwhile a repeat call for the same story (for a refine, the same option) starts nothing and answers "still running" again; stride.get_tool_call_status follows the run: given that toolCallId and waitSeconds 40 it waits for the run (a 3-minute run takes about 5 calls) and returns the result once it is saved, or says it failed. Cancelling the call before it answers stops the run and saves nothing.

NameRequiredDescriptionDefault
detailNo"happy" (core path, default) or "full" (include exception paths).
storyIdYesStory ticket key like "ORB-526" (preferred) or a Stride UUID.
instructionsNoOptional extra guidance (e.g. "model the refund branch").

TDQS

A4.3/5.0
Behavior5/5

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

Extremely explicit about behavior beyond annotations: ~4 minute runtime, the 52-second 'still running' + toolCallId pattern, background completion, deduplication of repeat calls for the same story/option, and that cancelling saves nothing. This directly informs the agent's retry/poll strategy, which annotations alone (openWorldHint, non-idempotent) could 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.

Conciseness4/5

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

Core purpose is front-loaded in the first clause, followed by the long-running/polling mechanics. The later sentences are long and compound (several clauses about repeat calls, waiting, and cancellation), but each carries non-redundant operational information.

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

Completeness4/5

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

Given no output schema, the description does explain the intermediate return ('still running' + toolCallId) and that the final result is saved, plus the how-to-follow-up path via stride.get_tool_call_status. It stops short of describing the shape of the final saved-process result, a minor remaining gap.

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

Parameters3/5

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

Schema description coverage is 100% and already documents all three parameters including the detail enum. The description mostly restates those semantics (ticket key example, detail options) without adding format or constraint details beyond the schema, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb and artifact: generates a BPMN process from a story's title/description/acceptance criteria, validates with bpmnlint, and persists a draft linked to the story. This clearly separates it from siblings like generate_diagram, get_process, or list_processes.

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

Usage Guidelines4/5

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

Gives the input precondition (story identified by ticket key or UUID) and optional detail/guidance knobs. It does not explicitly contrast with generate_diagram or explain when to regenerate vs. refine an existing process, but the usage context is clear.

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

stride.generate_ui_designGenerate UI designAInspect

Generate AI UI-mockup options (HTML/CSS) for a story, from its title + description. Persists them as a design the team can preview/refine/attach in the studio. Identify the story by ticket key (e.g. "ORB-526") or UUID. Optionally pass count (1-5) and free-text instructions. Can take up to ~4 minutes, longer than many MCP clients wait. If it is still running after about 52 seconds this tool answers "still running" with a toolCallId and finishes in the background, saving the result when done. Meanwhile a repeat call for the same story (for a refine, the same option) starts nothing and answers "still running" again; stride.get_tool_call_status follows the run: given that toolCallId and waitSeconds 40 it waits for the run (a 3-minute run takes about 5 calls) and returns the result once it is saved, or says it failed. Cancelling the call before it answers stops the run and saves nothing.

NameRequiredDescriptionDefault
countNoHow many distinct options to generate (1-5, default 3).
storyIdYesStory ticket key like "ORB-526" (preferred) or a Stride UUID.
instructionsNoOptional extra guidance (e.g. "dark mode, sidebar layout").

TDQS

A4.3/5.0
Behavior5/5

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

Annotations only declare readOnly=false, openWorld=true, idempotent=false, destructive=false — they say nothing about latency or async behavior. The description adds exactly that: up to ~4 minutes runtime, a ~52-second cutoff returning 'still running' with a toolCallId, background completion that saves the result, concurrent same-story calls that start nothing, and the warning that cancelling the call 'stops the run and saves nothing'.

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

Conciseness4/5

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

Purpose and persistence are front-loaded in the first sentence, and the long async guidance is packed with operational detail rather than filler. It is on the long side (eight sentences) and the 'still running' repeat-call behavior is restated twice, but that repetition carries real information about concurrent calls.

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

Completeness4/5

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

With no output schema, the description still explains what happens to the result (saved as a design the team can preview/refine/attach) and how to retrieve it via get_tool_call_status. The one gap is that it does not describe the shape of a successful response (design id, option list), which an agent would want when no output schema exists.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents all three parameters — including the 'ORB-526' preferred format, the 1-5 count range and default, and the 'dark mode, sidebar layout' instructions example. The description repeats those same facts without adding new semantics, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Generate AI UI-mockup options (HTML/CSS) for a story') plus the persistence effect, so an agent immediately knows this creates new design artifacts. Sibling-name confusion with refine_ui_design, list_designs, or link_design is avoided because the description names the output artifact (a design) and the source (story title + description).

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

Usage Guidelines4/5

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

Gives concrete usage context: identify the story by ticket key or UUID, optionally pass count 1-5 and free-text instructions, and explicitly routes long-running runs to stride.get_tool_call_status with the exact waitSeconds 40 pattern. It does not explicitly say 'use refine_ui_design instead when modifying an existing design', so the new-vs-refine boundary is only implied by the parenthetical 'for a refine, the same option'.

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

stride.get_adrGet ADRA
Read-onlyIdempotent
Inspect

Fetch one architecture decision record: title, status, context, decision, consequences, publishedVersion. Optional include: "versions" (published snapshot metadata, newest first). Ids come from stride.list_adrs. Link an ADR to stories/components with stride.create_cross_link.

NameRequiredDescriptionDefault
adrIdYesADR UUID (from stride.list_adrs).
includeNoOptional facets: "versions".

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower; the description adds real behavioral context by naming the returned fields and specifying that the 'versions' facet returns published snapshot metadata ordered newest first. It does not mention error behavior for an unknown id 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.

Conciseness5/5

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

Three tightly packed sentences: what it returns first, then the optional facet with its semantics, then id provenance and the related linking tool. No filler or redundancy.

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

Completeness5/5

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

There is no output schema, and the description compensates by enumerating the returned fields, plus it covers the optional facet, its ordering, id sourcing, and a natural next step. An agent has everything needed to call it correctly and interpret the result.

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

Parameters4/5

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

Schema coverage is 100%, so the schema already documents both parameters and a 3 would be acceptable baseline. The description adds meaning beyond the schema by explaining what the versions facet actually contains and its ordering, and reinforces the provenance of adrId.

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

Purpose5/5

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

Uses a specific verb (fetch) plus a precisely scoped resource (one architecture decision record) and enumerates the returned fields. The 'one' plus the pointer to stride.list_adrs makes it distinguishable from the list sibling without opening either schema.

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

Usage Guidelines4/5

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

Explicitly says the id must come from stride.list_adrs, which tells the agent the list tool is the prerequisite alternative, and points to stride.create_cross_link as the follow-up for linking. It does not state any when-not-to-use condition, 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.

stride.get_defectGet defectA
Read-onlyIdempotent
Inspect

Fetch a defect by id with its description, severity, status, linked story and test case.

NameRequiredDescriptionDefault
defectIdYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds useful context beyond that by naming the fields returned, though it says nothing about error behavior for a missing id.

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

Conciseness5/5

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

One sentence, zero waste, with the resource and the id scoping front-loaded and the return contents trailing. Nothing to trim.

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

Completeness4/5

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

There is no output schema, so listing the returned fields is genuinely needed and is done well. For a single-parameter read tool with full annotation coverage, the remaining gap (behavior on unknown id) is minor.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must carry the parameter meaning. 'By id' does communicate that defectId is the defect identifier, but it adds no format, source, or lookup guidance beyond that minimal hint.

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

Purpose4/5

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

States a specific verb (fetch) and resource (defect) scoped by id, and enumerates what comes back (description, severity, status, linked story and test case). It is clearly distinguishable from the sibling list_defects by its single-item-by-id framing, though it never names the sibling explicitly.

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

Usage Guidelines3/5

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

The 'by id' phrasing implies you should call this when you already have a defect identifier, but there is no statement of when to prefer it over list_defects or update_defect, and no exclusions or prerequisites. Usage 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.

stride.get_design_contextGet design contextA
Read-onlyIdempotent
Inspect

Fetch a UI design as buildable context: its screens, the navigation flow between them, ready-to-paste React + Tailwind components, a self-contained HTML file, and the design-lint findings already known about it. Use this before implementing a screen from a design — it replaces reading the raw HTML and guessing at the structure. Optional include narrows the sections returned.

NameRequiredDescriptionDefault
includeNoOptional subset of sections to return. Omit for everything.
designIdYesThe design UUID.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive, closed-world, so the safety profile is free. The description adds real context beyond that: the response is a bundled multi-section payload, lint findings are precomputed/'already known', and the payload can be narrowed via include — which matters for a potentially large read. It doesn't mention payload size limits or failure behavior for bad IDs.

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

Conciseness5/5

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

Two sentences: the first front-loads the payload contents, the second front-loads the usage condition and the parameter hint. No filler, and every clause carries information.

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

Completeness5/5

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

With no output schema, the description carries the burden of describing return shape, and it does so by enumerating all five section types that the include enum also names. Combined with the pre-call guidance, an agent has everything needed to invoke it correctly.

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

Parameters3/5

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

Schema description coverage is 100% and both properties are documented, including the enum values for include. The description's note that 'include narrows the sections returned' restates the schema rather than adding format or interaction detail, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource plus full payload enumeration: screens, navigation flow, React + Tailwind components, self-contained HTML, and lint findings. An agent can distinguish this from generate_ui_design or list_designs without opening any schema.

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

Usage Guidelines4/5

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

'Use this before implementing a screen from a design' gives a clear triggering context, and 'replaces reading the raw HTML and guessing at the structure' explains the value relative to a manual approach. It stops short of naming sibling tools (e.g. refine_ui_design, generate_ui_design) as alternatives, so there is no explicit exclusion rule.

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

stride.get_diagramGet diagramA
Read-onlyIdempotent
Inspect

Read one architecture diagram (ERD, BPMN, system context, container, component, deployment, sequence, data flow, or state machine) as its semantic graph: components with type / technology / description, and connections with resolved endpoint names. Canvas geometry is omitted. Use list_diagrams to discover ids, or the diagrams section of get_story_context for the diagrams linked to a story.

NameRequiredDescriptionDefault
diagramIdYesUUID of the architecture diagram.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, non-destructive and closed-world behaviour, so the description doesn't need to repeat them; it adds real value by describing the return shape (components with type/technology/description, connections with resolved endpoint names) and the deliberate exclusion of canvas geometry. Missing only error behaviour for unknown or deleted diagram ids.

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

Conciseness5/5

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

Front-loaded with the action and the returned payload, then the geometry caveat, then the sibling pointers. Every clause earns its place; nothing repeated or padded.

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

Completeness4/5

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

With no output schema, the description carries the return-shape burden and does so competently, plus it names the diagram taxonomy and id source. It would be complete at 5 with a note on what happens for a stale id or an unauthorized diagram.

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

Parameters3/5

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

Only one parameter and schema coverage is 100%, so the schema already documents `diagramId` as a UUID. The description contributes only the hint to obtain ids from list_diagrams, which is a baseline-level addition rather than new format or constraint detail.

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

Purpose5/5

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

States a specific verb and resource (read one architecture diagram), enumerates the diagram kinds covered, and describes exactly what is returned: a semantic graph of typed components and named connections, with canvas geometry omitted. That distinguishes it immediately from list_diagrams and from the broader context tools.

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

Usage Guidelines4/5

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

Explicitly points to list_diagrams for id discovery and to the `diagrams` section of get_story_context for story-linked diagrams, which is clear routing guidance. It stops short of saying when not to use it, e.g. when a design or process document would be the better source.

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

stride.get_documentGet documentA
Read-onlyIdempotent
Inspect

Read the full text of a Library document (meeting notes, PRD, spec, retro, etc.) by id. Use after stride.search_documents to read a document body before summarizing it or creating stories/tasks from it.

NameRequiredDescriptionDefault
documentIdYesThe document UUID.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower. The description adds useful context that it returns the FULL text (not a summary or metadata) and where it fits in a read-then-act workflow; it lacks error behavior for unknown ids, so not a 5.

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

Conciseness5/5

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

Two tight sentences with no waste, front-loading what is returned before the workflow hint. Every clause earns its place.

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

Completeness4/5

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

Complete for a one-parameter read tool: what it does, what it returns (full text), and when to call it are all present, with annotations covering safety. No output schema exists, but 'full text' sufficiently signals the return; only minor gaps like error/missing-id behavior remain.

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

Parameters3/5

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

Schema coverage is 100% and the single documentId is already documented as a UUID, so the schema does the heavy lifting. The description's 'by id' adds only marginal meaning beyond that; baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb (read) and resource (full text of a Library document), gives concrete examples of document types, and scopes it by id. It clearly distinguishes itself from metadata/search tools like stride.search_documents.

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

Usage Guidelines4/5

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

Explicitly routes the agent: use after stride.search_documents and before summarizing or creating stories/tasks from the content. It gives a clear workflow position but does not state when not to use it (e.g., use append_to_document or update_document instead of reading).

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

stride.get_epicGet epicA
Read-onlyIdempotent
Inspect

Get an epic by id with story rollup (counts, points, status breakdown) and the set of distinct sprints it spans. Returns slim story stubs (id/title/status/priority/points/assignee/sprint) so agents can pivot to specific stories with get_story or update_story.

NameRequiredDescriptionDefault
epicIdYesUUID of the epic.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare this a safe, idempotent, closed-world read, so the description's job is to add payload behavior — and it does: aggregated story rollup, status breakdown, distinct sprint set, and the fact that stories come back as slim stubs with a named field set. It does not say what happens with an unknown epicId or whether story stubs are truncated, which keeps it out of the top score.

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

Conciseness5/5

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

Two sentences, zero filler. Purpose and return contents come first, the pivot guidance comes second, and every clause carries new information (rollup metrics, stub field list, next-step tools).

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

Completeness4/5

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

With no output schema, the description must carry the return contract, and it does so comprehensively — aggregate shape plus stub field list. Minor gaps remain around failure behavior for a bad id and whether the story stub list is bounded, but nothing essential to a correct call is missing.

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

Parameters3/5

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

There is a single parameter at 100% schema description coverage ('UUID of the epic'), so the schema fully carries parameter meaning. The description adds only the phrase 'by id', which restates rather than extends the schema — baseline 3 applies.

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

Purpose5/5

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

The description opens with a specific verb and resource ('Get an epic by id') and immediately enumerates what the response contains: rollup counts, points, status breakdown, and distinct sprints. That detail distinguishes it cleanly from list_epics (enumeration) and get_story (single story), so an agent can select it 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.

Usage Guidelines3/5

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

Usage is implied rather than stated: fetching one epic by its id. The only explicit routing advice points downstream ('pivot to specific stories with get_story or update_story'), not at how to choose this tool over siblings like list_epics or get_story_context. It never says when not to use it or where the epicId comes from.

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

stride.get_legacy_evidenceGet legacy evidenceA
Read-onlyIdempotent
Inspect

Fetch citation evidence snippets by key (EV-000123) for a legacy system (Modernize), up to 50 keys. Returns the source/schema/traffic excerpt backing each cited finding.

NameRequiredDescriptionDefault
keysYesOne to 50 evidence keys to fetch (from get_legacy_system include: ["evidence_index"]).
legacySystemIdYesUUID of the legacy system.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare this as a safe read (readOnly, idempotent, non-destructive, closed-world), so the bar is lower; the description nonetheless adds meaningful behavior by stating the 50-key ceiling and describing what comes back (source/schema/traffic excerpts per finding), which matters because there is no output schema. It stops short of saying how missing or invalid keys are handled.

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

Conciseness5/5

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

Two sentences with zero filler: the operation and its keying come first, the return payload second. Nothing is duplicated or padded.

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

Completeness4/5

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

For a two-parameter read tool with no output schema, the description supplies the essential return-content picture and the batch limit. Remaining gaps are partial-result and error behavior, which are minor but non-trivial for a batch-key lookup.

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

Parameters3/5

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

Schema coverage is 100%, so both parameters and the 1–50 item bounds are already documented. The description's key example (EV-000123) and 50-key limit largely restate schema content rather than adding new semantics, so baseline 3 applies.

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

Purpose4/5

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

States a specific verb+resource: fetch citation evidence snippets by key for a named legacy system, and clarifies it is the excerpt backing a cited finding. That is clearly distinct from siblings like get_legacy_system or get_legacy_parity, though the description 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.

Usage Guidelines3/5

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

Usage is implied by 'backing each cited finding' and the key format, but the description itself gives no when-to-use/when-not guidance and does not name get_legacy_system as the place to obtain keys — that pointer exists only in the schema. An agent must infer the call sequence.

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

stride.get_legacy_parityGet legacy parityA
Read-onlyIdempotent
Inspect

Behavioral-parity rollup for a legacy system (Modernize): overall %, regression count, and per-rule breakdown from the latest complete baseline/target characterization run pair.

NameRequiredDescriptionDefault
legacySystemIdYesUUID of the legacy system.

TDQS

A4/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, non-destructive, and closed-world behavior. The description adds meaningful context by specifying that it returns a rollup from the latest complete characterization run pair, which tells the agent about data dependency and freshness. It does not contradict annotations.

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

Conciseness5/5

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

A single, well-structured sentence that front-loads the purpose and packs essential details without any waste.

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

Completeness4/5

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

For a read-only tool with one parameter and no output schema, the description is nearly complete. It omits what happens if no complete run pair exists, but the annotations and schema cover most needs.

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

Parameters3/5

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

Schema coverage is 100%, so the parameter legacySystemId is fully documented in the schema. The description does not add meaning beyond the schema for 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.

Purpose5/5

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

The description precisely states the return content (overall %, regression count, per-rule breakdown) and the data source (latest complete baseline/target characterization run pair), clearly distinguishing this rollup tool from siblings like get_legacy_system or get_legacy_evidence.

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

Usage Guidelines3/5

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

Usage is implied by the context of a 'latest complete baseline/target characterization run pair', but the description does not explicitly state when to use this tool versus alternatives such as get_legacy_evidence or trigger_legacy_reanalysis, nor does it mention prerequisites or exclusions.

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

stride.get_legacy_systemGet legacy systemA
Read-onlyIdempotent
Inspect

Fetch one legacy system (Modernize, Optimize module) as a plain-text context bundle — components, integrations, business rules, data flows, scores, and analysis highlights. Optional include facets: 'requirements' (per-family counts + FR ids; absent with a facetNotes entry when none generated yet), 'plan' (latest transformation plan summary), 'progress' (modernization progress rollup), 'evidence_index' (every evidence key with its file/lines — the keys stride.get_legacy_evidence takes). structuredContent.registration says whether the system was registered manually and whether a repository is connected (a manual system with none cannot be analysed until a human connects one).

NameRequiredDescriptionDefault
includeNoOptional facets to append to structuredContent: 'requirements', 'plan', 'progress', 'evidence_index'.
legacySystemIdYesUUID of the legacy system.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover the read-only, idempotent, non-destructive profile, but the description adds meaningful behavior: the return is a plain-text bundle, facets can be absent with a facetNotes entry explaining why, and structuredContent.registration reveals whether analysis is even possible. The only gap is no mention of bundle size limits or truncation for large systems.

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

Conciseness4/5

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

The core action is front-loaded in the first clause and every sentence carries information, with no filler. Density is high, though long em-dash-and-parenthetical sentences make it harder to scan than it could be.

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

Completeness5/5

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

With no output schema, the description carries the burden and does: it itemizes the bundle's sections, names the structuredContent.registration flag and its implication, and explains facet absence semantics. An agent can call this correctly and interpret the result from the description alone.

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

Parameters5/5

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

Although schema coverage is 100%, the schema only lists the four enum strings, while the description explains what each yields: 'requirements' gives per-family counts plus FR ids, 'plan' a latest plan summary, 'progress' a modernization rollup, and 'evidence_index' the exact keys accepted by stride.get_legacy_evidence. That is substantial semantic value beyond the enum names.

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

Purpose5/5

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

States a specific verb and singular resource ('Fetch one legacy system') and enumerates the bundle's contents (components, integrations, business rules, data flows, scores, analysis highlights). The singular 'one legacy system' plus the get_ prefix cleanly separates it from the list_legacy_systems sibling, and the mention of evidence keys points at get_legacy_evidence without confusion.

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

Usage Guidelines3/5

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

The description implies usage by explaining what each optional facet adds and by noting that a manual system without a connected repo 'cannot be analysed until a human connects one', which is a real precondition. However, it never states explicitly when to call this versus list_legacy_systems, get_legacy_evidence, or get_modernization_repo_status, so the agent must infer the routing.

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

stride.get_modernization_repo_statusGet modernization repo statusA
Read-onlyIdempotent
Inspect

Read the connected GitHub repository status for a legacy system (Modernize): owner/repo/branch, link status, staleness (code changed since last analysis), and any in-progress ingest. With no repository, says whether the system was registered manually (a human must connect one in Stride before analysis can run).

NameRequiredDescriptionDefault
legacySystemIdYesUUID of the legacy system.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already establish read-only, idempotent, closed-world behavior, so the description only needs to add context – and it does, by defining 'staleness' (code changed since last analysis) and by disclosing the manual-registration branch of behavior. It could go further on what an 'in-progress ingest' means operationally, but this is solid added value.

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

Conciseness4/5

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

Two sentences, front-loaded with the primary read, then the edge case. It is dense but every clause carries information; the only minor cost is that the parenthetical about manual registration is slightly buried mid-sentence.

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

Completeness4/5

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

With no output schema, the description must convey return content, and it does via the enumerated fields plus the no-repository outcome. An agent can call this correctly knowing only legacySystemId; the remaining gap is the format of the returned status values, which is minor.

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

Parameters3/5

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

There is a single required parameter with 100% schema description coverage ('UUID of the legacy system'), so the schema carries the semantics. The description adds nothing about the identifier itself, which is the expected baseline of 3.

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

Purpose5/5

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

The description opens with a specific verb+resource ('Read the connected GitHub repository status for a legacy system') and enumerates exactly what is returned: owner/repo/branch, link status, staleness, in-progress ingest. That is clearly differentiated from siblings like get_legacy_system (system metadata) and trigger_legacy_reanalysis (a mutation).

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

Usage Guidelines3/5

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

Usage is only implied: an agent can infer this is the pre-analysis check and that the no-repo case blocks analysis until a human connects a repository. It never names an alternative tool or states an explicit condition such as 'call before trigger_legacy_reanalysis' or 'use get_legacy_system for system metadata'.

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

stride.get_processGet processA
Read-onlyIdempotent
Inspect

Full detail of one process model (Optimize): steps (name/type/role/duration), connections, status, and any bound sprint/epic. Read-only.

NameRequiredDescriptionDefault
processIdYesUUID of the process.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world, so the description's 'Read-only' tag is largely redundant. It does add value by disclosing the shape of the returned content (steps, connections, status, sprint/epic binding), but says nothing about pagination, error behavior for unknown IDs, or permissions.

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

Conciseness5/5

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

A single dense sentence, front-loaded with the core action and followed by the return-field inventory; there is no filler.

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

Completeness4/5

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

There is no output schema, so the description must convey return contents, which it does via the enumerated fields. It is nearly complete for a simple one-parameter read, with only edge-case behavior (missing process, access limits) unexplained.

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

Parameters3/5

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

Schema coverage is 100% with a single required processId documented as a UUID, so the schema does the heavy lifting. The description adds no format, sourcing, or identifier-hierarchy guidance beyond the schema.

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

Purpose5/5

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

The description gives a specific verb and resource (full detail of one process model) and enumerates exactly what is returned: steps with name/type/role/duration, connections, status, and bound sprint/epic. This clearly separates it from list_processes and get_process_kpis without opening either schema.

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

Usage Guidelines3/5

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

The phrase 'one process model' combined with the required processId implies a fetch-by-id lookup, so usage is inferable. However, it never states when to choose this over list_processes, get_process_kpis, or list_process_insights, and gives no prerequisites or exclusions.

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

stride.get_process_kpisGet process KPIsA
Read-onlyIdempotent
Inspect

Mined KPIs for a process (Optimize): case count, cycle-time p50/p95, throughput, conformance, and automation rate — computed from the live event stream. Optional from/to ISO date window. Read-only.

NameRequiredDescriptionDefault
toNoOptional ISO end of the date window.
fromNoOptional ISO start of the date window.
processIdYesUUID of the process.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered; the description still adds real value by disclosing that values are computed from the live event stream (freshness semantics) and by enumerating what is returned in the absence of an output schema. The closing 'Read-only' merely restates the annotation, but that is a minor redundancy rather than a contradiction.

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

Conciseness4/5

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

Front-loaded with the core purpose and the metric list, followed by two short qualifiers. Very little waste, though the trailing 'Read-only.' duplicates the annotation and could have been replaced with more useful information such as default window behaviour.

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

Completeness4/5

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

With no output schema, the description correctly takes on the job of listing the returned metrics, and it explains the data source. Remaining gaps — units/format of cycle-time percentiles, default time window, and whether a process needs to be mined/generated first — are modest but real for a metrics endpoint.

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

Parameters3/5

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

Schema description coverage is 100%, so processId and the from/to fields are already documented; the description only echoes that the date window is optional and ISO-formatted. It does not clarify defaults, whether the window filters events or cases, or whether a missing window means all time, so it does not materially exceed the schema.

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

Purpose4/5

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

The description names the resource (a process), the source ('mined KPIs... computed from the live event stream'), and enumerates the metric families returned. It is clearly a metrics-read tool, but it never contrasts itself with near neighbours like get_sprint_metrics, list_process_insights, or run_process_insights, so an agent must infer the boundary.

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

Usage Guidelines3/5

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

Usage is only implied: '(Optimize)' and 'live event stream' hint at the mining context, and 'Optional from/to ISO date window' tells you the window is optional. There is no explicit statement of when to pick this over get_sprint_metrics or list_process_insights, and no prerequisites (e.g. does the process need mined event data first?).

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

stride.get_quality_gateGet quality gateA
Read-onlyIdempotent
Inspect

Fetch a single quality gate by id: full criteria, current status, gateType, the polymorphic target binding (sprint/release/test-suite/process), and the 5 most-recent PASS/FAIL evaluation events. Use stride.list_quality_gates to discover gate ids.

NameRequiredDescriptionDefault
qualityGateIdYesUUID of the quality gate.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the safety profile is covered. The description adds genuinely useful behavioral context the annotations lack: the payload is a single record including full criteria and only the 5 most-recent PASS/FAIL events, which signals a bounded result set. It does not say what happens for an unknown or deleted id.

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

Conciseness5/5

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

One dense sentence covering the resource and return shape, followed by one short routing sentence. The verb and resource are front-loaded, and the '5 most-recent' cap plus the polymorphic target list are the kind of specifics that earn their place.

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

Completeness4/5

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

With no output schema, the description carries the return-value burden and does so well by naming the fields returned and the event cap. Missing only edge-case behavior (invalid/soft-deleted id) and whether the embedded criteria are full definitions versus summaries, which is partly implied by 'full criteria'.

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

Parameters4/5

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

Schema coverage is 100% and the single parameter is documented as a UUID, so the baseline would be 3. The description adds value by framing the id's provenance — it comes from stride.list_quality_gates — which the schema does not state, helping the agent obtain a valid value.

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

Purpose5/5

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

States a specific verb and resource ('Fetch a single quality gate by id') and then enumerates exactly what the payload contains: criteria, status, gateType, polymorphic target binding, and recent evaluation events. This clearly separates it from sibling reads like list_quality_gates or run_quality_gate_check without requiring the reader 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.

Usage Guidelines4/5

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

Explicitly routes id discovery to stride.list_quality_gates, giving the agent the prerequisite for a required parameter. It does not state the inverse (when not to use this, e.g. to actually evaluate a gate use run_quality_gate_check), so it stops short of full when/when-not coverage.

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

stride.get_releaseGet releaseA
Read-onlyIdempotent
Inspect

Fetch a single release by id: name, version, status, targetDate, description, storyIds, and whether structured release notes exist. Soft-deleted releases read as not found.

NameRequiredDescriptionDefault
releaseIdYesUUID of the release.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered; the description adds genuine behavioral context with 'Soft-deleted releases read as not found,' which tells the agent how a deleted record manifests and prevents wasted retries. It stops short of describing auth requirements or the exact not-found response shape.

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

Conciseness5/5

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

Two compact sentences: the core behavior with the returned field list front-loaded, then the soft-delete caveat. No filler, no restatement of the name or annotations.

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

Completeness4/5

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

With no output schema, the description usefully enumerates the returned fields (name, version, status, targetDate, description, storyIds, structured-notes flag), which is exactly the compensating detail needed for a single-param tool. Minor gap: no indication of error behavior for malformed UUIDs or a missing release.

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

Parameters3/5

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

Schema coverage is 100% and the sole parameter is documented in the schema as 'UUID of the release.' The description only reinforces that the id identifies a single release, adding little beyond the structured field, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb+resource ('Fetch a single release by id') and enumerates the fields returned, so the agent knows exactly what this tool produces. It implicitly separates itself from list_releases via 'single ... by id', but never names 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.

Usage Guidelines3/5

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

Usage is implied by 'by id' — this is the lookup path when a release UUID is already known, as opposed to the bulk list. However, there is no explicit statement of when to prefer this over stride.list_releases or any exclusion for soft-deleted records beyond the not-found note.

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

stride.get_sprintGet sprintA
Read-onlyIdempotent
Inspect

Fetch a sprint with its stories. Returns name, status, goal, dates, and an inline array of compact stories (up to 200). Use stride.get_story for full story details. For a COMPLETED sprint, counts.totalPoints/donePoints and counts.totalStories/doneStories are the totals recorded when it closed (closing can move its unfinished stories out, so counts.stories/done and the inline stories are only what is still on it); totalPoints and totalStories are null when none were recorded.

NameRequiredDescriptionDefault
sprintIdYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already cover read-only/idempotent safety, and the description adds substantial non-obvious behavior: the 200-story inline cap, and that for COMPLETED sprints counts.stories/done and inline stories reflect only what remains after closing moved unfinished work out, with totals null when unrecorded. That is high-value disclosure beyond 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.

Conciseness5/5

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

Front-loads purpose and return shape, then the sibling pointer, then the caveat about completed-sprint counts. Dense but every sentence conveys needed information; no filler.

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

Completeness5/5

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

No output schema exists, and the description compensates by enumerating returned fields and clarifying count semantics and the inline-story cap. Nothing essential for correct invocation is missing besides the ID format nuance.

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

Parameters3/5

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

There is one parameter (sprintId) with 0% schema description coverage, and the description says nothing about its expected format or where to obtain it. The parameter name is self-evident, so this is a minor but real gap rather than a fatal one.

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

Purpose5/5

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

States a specific verb (fetch) and resource (sprint) plus what is returned: name, status, goal, dates, and an inline array of compact stories. It explicitly distinguishes itself from stride.get_story, so an agent can pick it 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.

Usage Guidelines5/5

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

Explicitly routes deep story reads to stride.get_story ('Use stride.get_story for full story details') and explains the completed-sprint case. The alternative and the condition selecting it are both stated.

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

stride.get_sprint_metricsGet sprint metricsA
Read-onlyIdempotent
Inspect

Compact metrics snapshot for a sprint: burndown summary, capacity totals, scope-creep, blocker count, sprint health score. Read-only. Full per-day burndown points / cycle-time entries / cumulative-flow stay on the REST endpoint to keep this response under the agent result-size budget. For a COMPLETED sprint the committed and done points and stories are the ones recorded when it closed (committedPts, completionPct and stories.total are null when none were recorded), score and the forecast fields are null, and capacity.perAssignee counts only the stories still on the sprint, since closing moves the unfinished ones out.

NameRequiredDescriptionDefault
sprintIdYesUUID of the sprint.

TDQS

A3.9/5.0
Behavior5/5

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

Annotations already declare read-only/idempotent, and the description goes well beyond them: it discloses the result-size budget rationale, the null semantics for score/forecast on completed sprints, that committedPts/completionPct/stories.total are null when unrecorded, and that capacity.perAssignee only counts stories still on the sprint after closing. This is exactly the kind of non-obvious behavior an agent cannot get from 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.

Conciseness4/5

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

The payload is front-loaded in the first sentence, with the REST-endpoint scope note second and the completed-sprint caveats last. It is slightly dense and long for one paragraph, but each sentence carries non-redundant information.

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

Completeness4/5

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

With no output schema, the description must carry return-value meaning, and it does name key fields and their null conditions. It falls short of describing the actual shape of nested results (burndown summary vs capacity vs scope-creep), which leaves some ambiguity for a composite metrics tool, but the critical edge cases are covered.

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

Parameters3/5

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

Only one parameter (sprintId) with 100% schema description coverage, so the schema already does the work. The description adds no format hints or constraints on the ID beyond what the schema states; its added meaning concerns return values rather than the parameter. Baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('Compact metrics snapshot for a sprint') and enumerates the contents (burndown summary, capacity totals, scope-creep, blocker count, health score), which implicitly separates it from get_sprint and get_sprint_test_health. It never names those siblings explicitly, so the differentiation is inferential 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.

Usage Guidelines3/5

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

The line about full per-day burndown points, cycle-time and cumulative-flow staying on the REST endpoint is an effective 'when not to use this' signal for detail-hungry callers. However, there is no guidance on when to pick this over get_sprint or get_sprint_test_health, which are the closest in-domain alternatives.

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

stride.get_sprint_test_healthGet sprint test healthA
Read-onlyIdempotent
Inspect

Test health of ONE sprint in a single call: how many test cases the sprint has (cases whose story is in the sprint, plus cases linked to it), how many passed / failed / blocked / skipped / never ran by most-recent executed result, the failed-or-blocked cases ordered by priority (top 10), and story coverage (stories in the sprint with at least one test). Required: sprintId (from stride.list_sprints). Use stride.get_sprint_metrics for delivery metrics (points, velocity) and stride.get_test_run for one run's results.

NameRequiredDescriptionDefault
sprintIdYesSprint UUID (stride.list_sprints).

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already cover read-only/idempotent/non-destructive, and the description adds genuinely non-obvious semantics: case inclusion rules (story in sprint plus directly linked cases), 'most-recent executed result' as the state source, and the top-10 priority ordering. It stops short of noting cost/latency for an aggregate call, so not a full 5.

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

Conciseness4/5

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

Front-loaded with purpose and scope, then the output breakdown, then sibling routing — no filler. The single long sentence with nested lists is dense but every clause carries information.

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

Completeness5/5

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

No output schema exists, so the description must describe return content, and it does so precisely (metric families, ordering, cap of 10, coverage definition). Nothing an agent needs to call or interpret the result is missing.

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

Parameters3/5

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

Only one parameter (sprintId) with 100% schema coverage that already says 'Sprint UUID (stride.list_sprints)'. The description repeats that provenance without adding format or validation detail, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb+resource (test health of ONE sprint) and enumerates the concrete outputs: case counts, pass/fail/blocked/skipped/never-ran breakdown, top-10 failed/blocked by priority, and story coverage. This is clearly distinguishable from siblings like get_sprint_metrics and get_test_run.

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

Usage Guidelines5/5

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

Explicitly routes the agent: use this for test health, stride.get_sprint_metrics for delivery metrics (points, velocity), stride.get_test_run for a single run's results. The 'ONE sprint' scoping and required sprintId source (list_sprints) are stated up front.

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

stride.get_storyGet storyA
Read-onlyIdempotent
Inspect

Fetch a single Stride story by its ticket key (e.g. "ORB-526") or UUID. Returns its displayId (ticket key), status, priority, points, labels, acceptance criteria, assignee, sprint/epic, and related-entity counts. Refer to the story by its ticket key in replies. Use before stride.update_story_status so you know the current state.

NameRequiredDescriptionDefault
storyIdYesStory ticket key like "ORB-526" (preferred) or a Stride UUID.

TDQS

A4.1/5.0
Behavior4/5

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 value beyond them by enumerating the returned fields (displayId, status, priority, points, labels, acceptance criteria, assignee, sprint/epic, related-entity counts) and by instructing the agent to cite the ticket key in replies.

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

Conciseness5/5

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

Three short sentences: purpose, return shape, then usage pointer — front-loaded and with no filler. The "ticket key in replies" instruction is short and actionable rather than padding.

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

Completeness4/5

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

With no output schema, the description correctly carries the burden by listing the fields returned, and single-parameter scope keeps things simple. The only softness is "related-entity counts", which stays vague about what is counted (comments? links? defects?).

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

Parameters4/5

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

Schema coverage is 100% and the schema already says ticket key is preferred. The description reinforces this with a concrete example ("ORB-526") and repeats the UUID alternative, adding a small amount of recognition value for an agent parsing user input.

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

Purpose4/5

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

States a specific verb and resource ("Fetch a single Stride story") and names both accepted identifier forms. It is distinguishable from list_stories/search_stories by the word "single", but it never mentions the nearest sibling, stride.get_story_context, so an agent must infer the boundary between them.

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

Usage Guidelines4/5

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

Gives an explicit sequencing rule: "Use before stride.update_story_status so you know the current state." That is real when-to-use guidance with a named tool. It stops short of exclusions — nothing says when to prefer get_story_context or search_stories instead.

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

stride.get_story_contextGet story contextA
Read-onlyIdempotent
Inspect

Fetch a story with its FULL linked context in one call: acceptance criteria, linked UI designs (with the current variants' HTML), linked documents, relations, sub-tasks, test cases, defects (with the test that found each), linked pull/merge requests, recent comments, and attachments. Use this before implementing a story so you have the complete spec — prefer it over multiple get_story / list_* calls. Accepts a ticket key ("ORB-526") or UUID. Optional include narrows the sections returned.

NameRequiredDescriptionDefault
includeNoOptional subset of sections to return. Omit for everything.
storyIdYesStory ticket key like "ORB-526" (preferred) or a Stride UUID.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotent/non-destructive, so safety is covered; the description adds the useful behavioral fact that this is an aggregation call returning many section types in one shot, plus that omitted `include` returns everything. It does not mention pagination, size limits, or behavior when a linked section is missing, which keeps it below a 5.

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

Conciseness4/5

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

Front-loaded with the core verb and the enumerated return payload, then usage routing, then parameter notes. The long section list is dense but each item is informative; it is slightly heavier than strictly necessary, but no sentence is filler.

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

Completeness5/5

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

With no output schema, the description takes on the burden of describing return contents and does so thoroughly by enumerating every section type. Combined with usage routing and parameter format guidance, an agent has everything needed to call it correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real value with a concrete key format example ('ORB-526'), the preference ordering (ticket key over UUID), and the semantics of `include` narrowing sections. That is meaning beyond the schema text.

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

Purpose5/5

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

States a specific verb (fetch) and resource (story with full linked context) and then enumerates exactly which sections are included, so an agent can tell it apart from stride.get_story without opening either schema. The scope distinction is explicit.

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

Usage Guidelines5/5

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

Gives an explicit when-to-use ('Use this before implementing a story so you have the complete spec') and names the alternatives it supersedes ('prefer it over multiple get_story / list_* calls'). The agent has a clear routing rule.

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

stride.get_test_caseGet test caseA
Read-onlyIdempotent
Inspect

Fetch a single Stride test case by id. Returns description, steps, expected result, priority, type, status, suite, assignee, linked storyId, and the last execution verdict. Use after stride.list_test_cases to inspect a specific case.

NameRequiredDescriptionDefault
testCaseIdYesThe Stride test case UUID.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds value by enumerating the returned payload (description, steps, expected result, priority, type, status, suite, assignee, storyId, last execution verdict), which partly compensates for the absence of 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.

Conciseness5/5

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

Two sentences, front-loaded with the action and resource, then the return payload, then the routing hint. No redundant restatement of the title and no wasted clauses.

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

Completeness4/5

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

For a single-parameter read tool with strong annotations but no output schema, the description supplies the field list an agent needs to decide whether this call has the data it wants. Only minor gaps remain (behavior when the id is unknown or not found).

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

Parameters3/5

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

Only one parameter, testCaseId, and schema description coverage is 100% with an explicit note that it is a Stride test case UUID. The description's "by id" adds nothing beyond the schema, so the baseline of 3 applies.

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

Purpose5/5

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

States a specific verb ('Fetch') and resource ('a single Stride test case by id'), and enumerates the returned fields. It is unambiguously distinct from stride.list_test_cases, stride.update_test_case, and stride.get_test_run among the many siblings.

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

Usage Guidelines4/5

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

"Use after stride.list_test_cases to inspect a specific case" names the sibling alternative and the condition that selects this tool. It does not state when NOT to use it (e.g., bulk inspection across many cases), but the routing signal is clear enough to act on.

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

stride.get_test_runGet test runA
Read-onlyIdempotent
Inspect

Fetch a single Stride test run by id. Returns name, status, environment, executedAt, notes, suiteId, parentRunId, and a result summary: counts by PASSED/FAILED/BLOCKED/SKIPPED over EXECUTED results (total), plus notExecuted for rows that never ran, totalResults for every row and withDefect for rows carrying a defect; linkedDefects lists the distinct defects those rows link (id/title/severity/status + the testCaseIds that link each). Use stride.list_test_results for the individual result rows.

NameRequiredDescriptionDefault
testRunIdYesThe Stride test run UUID.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description goes well beyond them: it enumerates the returned fields and precisely defines the result-summary semantics (counts over EXECUTED results, notExecuted, totalResults, withDefect, linkedDefects with their testCaseIds). That is the key ambiguous behavior for a read tool 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.

Conciseness4/5

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

Front-loaded with the one-line purpose, then the return detail. The second sentence is dense and semicolon-chained, but nearly every clause carries distinct, non-derivable information.

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

Completeness5/5

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

With no output schema, the description fully documents the return shape and summary-field semantics, which is exactly what an agent needs to interpret the response. Nothing material is missing for a one-parameter read tool.

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

Parameters3/5

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

Schema coverage is 100% and the single parameter is documented as the Stride test run UUID. The description only restates "by id" without adding format or edge-case guidance, so the schema does the work.

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

Purpose5/5

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

States a specific verb and resource with scope: "Fetch a single Stride test run by id." It explicitly distinguishes itself from stride.list_test_results and, by implication, from stride.list_test_runs by fetching one record rather than a collection.

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

Usage Guidelines4/5

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

Explicitly routes the agent to stride.list_test_results when individual result rows are needed, which is the most likely confusion point. It doesn't address when to prefer stride.list_test_runs with a filter, but the single-by-id scope makes that fairly obvious.

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

stride.get_tool_call_statusGet tool call statusA
Read-onlyIdempotent
Inspect

Check on a long generation that answered "still running": stride.generate_ui_design, stride.refine_ui_design, stride.generate_process or stride.generate_diagram. Pass the toolCallId from that answer and waitSeconds 30-40: the call then waits (up to 40 s) for the run and answers the moment it finishes, so a 3-minute run takes about 5 calls, and the waiting happens on the server, which suits clients such as Claude Desktop that cannot sleep between calls. Returns status running, saved or failed. Once it is saved or failed you get the same result the generation call would have returned (the new design, process or diagram id and counts, any placeholder-layout warning, or why it failed). While the run is in flight, calling the generator again starts nothing; once the run has failed, or about 5 minutes after it started, the generator starts a new run. Read-only; it answers only for generations started by this agent connection.

NameRequiredDescriptionDefault
toolCallIdYesThe toolCallId from the "still running" answer of the generation call (a UUID).
waitSecondsNoOptional. Seconds to wait for the run to finish before answering (0-40, default 0); the call returns the moment the run does. Use 30-40 while a run is going. Values outside 0-40 are clamped, never rejected.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only cover read-only/idempotent safety; the description adds genuinely new behavior: server-side long-polling up to 40s, ~5 calls for a 3-minute run, the three possible status values, and that the final payload is identical to what the generation call would have returned. It also discloses the scope restriction (answers only for generations started by this agent connection) and the ~5-minute regeneration window, none of which appear in 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.

Conciseness4/5

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

Front-loaded with the trigger condition and the sibling generators, then the mechanics, then the return contract. Dense and largely waste-free, though the Claude Desktop sleep rationale and the semicolon-chained sentences make it heavier than necessary.

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

Completeness5/5

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

No output schema exists, and the description fully compensates: it names the three status values and describes the terminal payload (new design/process/diagram id and counts, placeholder-layout warning, failure reason). Nothing needed to call this correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description goes further by explaining where toolCallId comes from (the "still running" answer) and why waitSeconds should be 30-40 rather than 0 — turning a documented range into actionable guidance with a rationale.

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

Purpose5/5

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

States a specific verb+resource (check status of a long-running generation) and immediately enumerates the four generator siblings whose "still running" answers it services. An agent can distinguish this from stride.generate_* tools without opening a schema.

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

Usage Guidelines5/5

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

Explicit trigger ("answered 'still running' from stride.generate_ui_design, stride.refine_ui_design, stride.generate_process or stride.generate_diagram"), explicit inputs, and explicit recommended waitSeconds value. It also spells out the counterfactual: calling the generator again while in flight starts nothing, and it restarts only after failure or ~5 minutes.

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

stride.list_adrsList ADRsA
Read-onlyIdempotent
Inspect

List architecture decision records (ADRs) in a Stride project: id, title, status (PROPOSED/ACCEPTED/DEPRECATED/SUPERSEDED), publishedVersion, dates. Filters: status, title search. Use stride.get_adr for the context/decision/consequences text, and stride.create_cross_link with sourceType "adr" to bind an ADR to a story or component. Defaults: page 1, limit 20, max 50.

NameRequiredDescriptionDefault
pageNo
limitNo
searchNoSubstring search on title.
statusNo
projectIdYesProject UUID.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description adds value by listing the shape of each returned record and the pagination ceilings (limit max 50), which go beyond structured fields. It doesn't mention total-count/pagination metadata, 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.

Conciseness4/5

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

Front-loads the purpose and returned fields, then filters, then sibling routing, then defaults — a logical ordering with no filler. It is dense but every clause carries information; only slight compaction would improve it.

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

Completeness4/5

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

With no output schema, the description correctly enumerates returned fields and covers the filterable dimensions plus pagination behavior, which is what an agent needs to call this correctly. A total-count or ordering note would have made it fully complete.

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

Parameters4/5

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

Schema coverage is only 40%, so the description carries real weight here: it documents search as a title substring filter, names the status enum universe, and supplies the page/limit defaults and the 50 max. Only projectId semantics are left entirely to the schema, so it nearly compensates for the coverage gap.

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

Purpose5/5

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

States a specific verb and resource ('List architecture decision records') and enumerates the returned fields (id, title, status, publishedVersion, dates) plus the filters. It also distinguishes itself from the get_adr and create_cross_link siblings explicitly, so an agent can tell the three 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.

Usage Guidelines5/5

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

Gives explicit routing: use get_adr for context/decision/consequences text, and create_cross_link with sourceType "adr" to bind an ADR to a story or component. The default and max pagination values tell the agent how to page without guessing.

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

stride.list_attachmentsList attachmentsA
Read-onlyIdempotent
Inspect

List file attachments on a story (metadata only — filename, mimeType, size, uploader, createdAt, url). Binary content stays on the REST endpoint at /api/stories/{id}/attachments/{attachId}.

NameRequiredDescriptionDefault
storyIdYesStory ticket key like "ORB-526" or a Stride UUID.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world, so the safety profile is covered. The description adds genuinely new behavioral facts: only metadata is returned, the payload fields are enumerated, and binary bytes must be fetched out-of-band from the given REST URL. Missing only ordering/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.

Conciseness5/5

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

Two tightly written sentences: the operation and its returned fields come first, the binary-content exclusion second. Every clause carries information an agent needs; zero filler.

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

Completeness4/5

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

With no output schema, enumerating the returned fields is exactly the right compensation, and the binary-content pointer prevents a common misuse. Only minor gaps remain (result ordering, pagination for stories with many attachments, behavior on an unknown storyId).

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

Parameters3/5

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

Schema description coverage is 100% and the single storyId parameter is already documented with example formats ("ORB-526" or a Stride UUID). The description adds nothing about the parameter beyond what the schema states, so the baseline of 3 applies.

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

Purpose5/5

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

States a specific verb and resource ("List file attachments on a story") plus the exact scope of what is returned (filename, mimeType, size, uploader, createdAt, url). The "metadata only" qualifier cleanly separates it from binary-download and from the upload/delete_attachment siblings without needing to name them.

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

Usage Guidelines4/5

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

Gives a clear condition for use (you want attachment metadata for a story) and explicitly redirects the agent elsewhere for binary content via the REST path. It does not explicitly mention the complementary siblings upload_attachment or delete_attachment, so there is no full when-not-to-use routing, but the usage context is unambiguous.

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

stride.list_commentsList commentsA
Read-onlyIdempotent
Inspect

List comments on a story, artifact, diagram, process or defect. Returns top-level comments sorted oldest-first with their replies nested inline; every comment carries reactions [{ emoji, count, mine }], where mine marks a reaction this agent left with stride.toggle_reaction. Read-only.

NameRequiredDescriptionDefault
limitNo
entityIdYesUUID of the entity.
entityTypeYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotentHint/non-destructive, and the description reinforces that while adding real value the schema does not carry: oldest-first ordering, replies nested inline, the reactions array shape and the meaning of 'mine' tied back to stride.toggle_reaction. It stops short of describing pagination or truncation behavior for large threads.

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

Conciseness5/5

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

Two sentences, zero filler, with the core operation front-loaded and the return-shape detail following. Every clause ('sorted oldest-first', 'replies nested inline', 'mine marks a reaction this agent left') adds information an agent would otherwise have to discover empirically.

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

Completeness4/5

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

For a read-only list tool with annotations covering safety and no output schema, the description adequately explains the returned structure and ordering. The remaining gap is pagination: nothing says what happens when a thread exceeds 'limit', which matters given the 200 cap.

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

Parameters2/5

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

Schema coverage is only 33% (just entityId documented), so the description must compensate — but it merely restates the entityType enum values already present in the schema and never mentions 'limit' (default 50, max 200) or any paging semantics. The one undocumented behavioral parameter is entirely absent from the prose.

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

Purpose5/5

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

States a specific verb and resource ('List comments') plus the full set of entity types it applies to, so it is immediately distinguishable from create_comment, update_comment and delete_comment siblings. An agent can tell what it retrieves 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.

Usage Guidelines3/5

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

Usage is only implied: 'List comments on a story, artifact, diagram, process or defect' tells the agent the resource but not when to prefer this over a sibling such as stride.list_story_activity, which could plausibly also surface comments. No when-not or alternative-routing guidance is given.

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

stride.list_defectsList defectsA
Read-onlyIdempotent
Inspect

List defects in a Stride project. Filters: status, severity, storyId (ticket key like "ORB-526" or UUID), assigneeId, search (title substring). Rows carry storyId, testCaseId (the test that found the defect, if any), a plain-text description preview (~200 chars) and hasDescription (false = stride.get_defect would show nothing more). Returns compact shape — use stride.get_defect for full detail.

NameRequiredDescriptionDefault
pageNo
limitNo
searchNo
statusNo
storyIdNoStory ticket key like "ORB-526" or UUID — only defects filed against that story.
severityNo
projectIdYes
assigneeIdNo

TDQS

A4.4/5.0
Behavior3/5

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

Annotations already declare readOnly/idempotent/non-destructive, so safety is covered. The description adds real value by describing the returned row shape, the ~200-char description preview, and the hasDescription flag semantics ('false = stride.get_defect would show nothing more'). It says nothing about pagination defaults or total counts, which for a list tool is a remaining gap.

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

Conciseness5/5

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

Three dense sentences with the purpose front-loaded, filters in the middle, and the return-shape/routing caveat last. Nothing is repeated from the title or schema, and each sentence adds new information.

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

Completeness4/5

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

With 8 parameters, 13% schema coverage and no output schema, the description steps in to describe return fields and the compact-vs-full tradeoff, which is exactly what's missing structurally. Pagination behavior and result ordering are the only unaddressed points for a paged list tool.

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

Parameters4/5

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

Schema coverage is only 13%, so the description must carry meaning, and it does for most filters: storyId accepts a ticket key like "ORB-526" or a UUID, search is a title substring, and status/severity/assigneeId are clarified as filters. Only page and limit are left entirely to the schema's defaults and bounds, which is a minor omission.

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

Purpose5/5

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

States a specific verb and resource ('List defects in a Stride project') and immediately distinguishes it from the sibling stride.get_defect by scope (compact list vs full detail). An agent can pick between the two without opening either schema.

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

Usage Guidelines5/5

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

Names the alternative tool explicitly and the condition that selects it ('use stride.get_defect for full detail'), plus enumerates the filter dimensions the listing supports. The routing decision is fully specified rather than inferred.

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

stride.list_designsList designsA
Read-onlyIdempotent
Inspect

Paginated list of UI designs (Design module) in a project — title, status, kind (SCREEN / STATES / FLOW), the story or defect it was generated from, and variant count. Read-only. Use this to find a designId, then stride.get_design_context for its screens, flow and React export.

NameRequiredDescriptionDefault
pageNo
limitNo
statusNoOptional status filter.
projectIdYesUUID of the project.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so 'Read-only' is largely redundant, but 'Paginated' adds real operational context and the field list discloses the response shape that no output schema provides. It stops short of stating page/limit defaults or maximums, which is the only material gap.

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

Conciseness5/5

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

Two sentences, both front-loaded and dense: the first defines content and return fields, the second gives the workflow. No filler, no restating of the title.

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

Completeness4/5

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

With no output schema, the description usefully sketches the returned fields and the paginated nature of the call, which is what an agent needs to decide whether to call it. Remaining gaps (pagination defaults and status enum semantics) are covered by schema constraints, so the definition is complete enough for a simple read-only list.

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

Parameters3/5

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

Schema description coverage is 50%: only projectId and status are documented inline, while page and limit rely on type/default/min/max constraints. The description implies project scoping and pagination but adds no syntax for page/limit or meaning for the DRAFT/ATTACHED/ARCHIVED enum, so it does not compensate for the gap.

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

Purpose5/5

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

States a specific verb (list) and resource (UI designs in the Design module) scoped to a project, and enumerates what each row carries: title, status, kind (SCREEN/STATES/FLOW), source story or defect, and variant count. That enumeration alone separates it from sibling list_* tools and from get_design_context.

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

Usage Guidelines5/5

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

Explicitly routes the agent: use this to find a designId, then call stride.get_design_context for screens, flow and React export. The alternative and the follow-up step are both named, so the agent does not have to infer the two-stage workflow.

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

stride.list_diagramsList diagramsA
Read-onlyIdempotent
Inspect

Paginated list of architecture diagrams (Design module) in a project — name, diagram type (ERD, BPMN, system context, container, …), version, component/connection counts, and parent diagram for hierarchies. Read-only. Use get_diagram for one diagram’s full semantic graph.

NameRequiredDescriptionDefault
pageNo
limitNo
projectIdYesUUID of the project.

TDQS

A4.2/5.0
Behavior4/5

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 reinforces read-only and adds that results are paginated and what metadata comes back. It stops short of stating total counts or ordering/version semantics.

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

Conciseness5/5

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

Two sentences, zero filler, with the resource and returned fields front-loaded and the alternative pointer at the end where routing decisions belong.

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

Completeness4/5

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

With no output schema, the description usefully enumerates the returned field set, which is the key gap it must fill. What remains missing is pagination mechanics (defaults, max, ordering) for the two undocumented parameters.

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

Parameters3/5

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

Schema coverage is only 33% (projectId documented, page/limit bare), so the description would ideally explain pagination behavior. It says 'Paginated' but gives no defaults, limits, or ordering, leaving page/limit semantics entirely to the schema defaults.

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

Purpose5/5

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

Specific verb (Paginated list) plus resource (architecture diagrams in Design module) and it enumerates the returned fields (name, type, version, counts, parent). The closing sentence names the sibling get_diagram and the differentiator (full semantic graph).

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

Usage Guidelines4/5

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

It explicitly routes the agent to get_diagram when a single diagram's full graph is needed, which is a clear alternative condition. It does not state when listing is inappropriate (e.g., searching by name) or mention other list siblings like list_designs.

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

stride.list_epicsList epicsA
Read-onlyIdempotent
Inspect

Paginated list of epics in a project with per-epic story-count rollup (totalStories / doneStories / totalPoints / donePoints / progress%). Filters out AI-traceability artifacts. Optional status filter (DRAFT / PUBLISHED / ARCHIVED).

NameRequiredDescriptionDefault
pageNo
limitNo
statusNo
projectIdYesUUID of the project.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds genuinely non-obvious behavior: results are paginated with a rollup computation per epic, and AI-traceability artifacts are filtered out of the result set — a result-shaping rule an agent could not infer from any structured field.

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

Conciseness4/5

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

Two tight sentences with the core capability front-loaded and the behavioral caveats (artifact filtering, status filter) after. Dense but every clause carries information; slightly telegraphic phrasing ('Filters out AI-traceability artifacts') costs a little clarity.

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

Completeness5/5

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

With no output schema, the description steps in to name the returned rollup fields (totalStories / doneStories / totalPoints / donePoints / progress%), which is exactly the missing context, and it flags the exclusion rule. For a read-only filtered list, nothing an agent needs to call it correctly appears absent.

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

Parameters3/5

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

Schema coverage is only 25% (only projectId is described), so the description must carry more weight. It does clarify the status dimension and its three values, and 'paginated' implies page/limit usage, but it never explains page-size defaults, the 200 cap, or ordering — gaps the schema alone leaves implicit.

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

Purpose4/5

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

States a specific verb and resource (paginated list of epics) scoped to a project, and adds what the payload contains (story-count rollup fields) plus an exclusion rule. It does not explicitly contrast with get_epic or list_stories, but the list-vs-get distinction is obvious from the name pair.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: 'paginated list … with optional status filter' tells the agent this is the browsing tool and that status narrows results. There is no explicit when-to-use/when-not guidance, no mention of when to prefer get_epic for a single epic, and no statement of what happens with an invalid or omitted status.

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

stride.list_labelsList labelsA
Read-onlyIdempotent
Inspect

List a project's labels two ways: labels are the Label rows (id, name, color — autocomplete/colour metadata, may be empty) and distinctStoryLabels are the label strings live stories actually carry, with a story count each. Filter or bulk-update by the NAME string (stride.list_stories / bulk_update_stories), which need no Label row.

NameRequiredDescriptionDefault
projectIdYesUUID of the project.

TDQS

A4.3/5.0
Behavior4/5

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

The annotations already declare this as a safe read-only, idempotent operation. The description adds useful behavioral context beyond annotations: Label rows are metadata and may be empty, while distinctStoryLabels reflect labels actually carried by live stories and include counts.

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

Conciseness5/5

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

The description is front-loaded with the core purpose and then explains the two result types and the relevant alternative usage. It is dense but every clause contributes useful selection or interpretation guidance.

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

Completeness5/5

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

With no output schema, the description carries the burden of explaining what the tool returns, and it does so clearly for both result collections. The single required parameter is fully covered by the schema, leaving no significant gaps for this read-only listing tool.

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

Parameters3/5

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

The only parameter, projectId, is fully documented in the schema as a project UUID. The description does not add further semantics for that parameter, so the baseline of 3 is appropriate given 100% schema description coverage.

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

Purpose5/5

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

The description names a specific verb and resource, then clearly distinguishes the two result shapes: Label rows and distinct story label strings with counts. This differentiates it from create_label, update_label, delete_label, and story-label filtering tools.

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

Usage Guidelines4/5

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

It explicitly points to stride.list_stories and bulk_update_stories for filtering or bulk-updating by the label NAME string, and explains that those paths do not require a Label row. It lacks an explicit 'when not to use' clause, but the usage context and alternatives are clear.

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

stride.list_legacy_systemsList legacy systemsA
Read-onlyIdempotent
Inspect

List the legacy systems (Modernize, Optimize module) in a project — name, analysis status, system type, primary language, scores (complexity / tech debt / automation readiness / maturity), and child counts (components, integrations, data flows, business rules, transformation plans). Read-only. Use stride.get_legacy_system for the full context bundle.

NameRequiredDescriptionDefault
projectIdYesUUID of the project.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotent/closed-world, so "Read-only" is mild restatement, but the description adds substantive behavioral detail the annotations lack: the exact field inventory returned, including derived scores and child counts. It omits pagination, ordering, and behavior when a project has no legacy systems.

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

Conciseness4/5

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

Front-loaded with the action and scope, then the field list, then the routing hint. The parenthetical enumeration is dense but earns its space because there is no output schema; the redundant "Read-only" is the only wasted token.

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

Completeness4/5

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

Given no output schema, spelling out returned fields is exactly the right compensation, and the safety profile is covered by annotations. Remaining gaps are minor: no indication of result volume, ordering, or empty-state behavior.

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

Parameters3/5

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

A single parameter with 100% schema coverage, so the schema already explains projectId as a UUID. The description adds no further meaning (e.g., whether the UUID must be a Modernize-enabled project or how invalid IDs behave), so baseline 3 applies.

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

Purpose5/5

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

Names a specific verb (List) and resource (legacy systems) scoped to a project, and enumerates exactly what each entry contains (name, status, type, language, scores, child counts). It is clearly distinguishable from the sibling stride.get_legacy_system, which is called out as the single-system alternative.

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

Usage Guidelines4/5

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

Explicitly routes the agent: use get_legacy_system when the full context bundle is needed. Together with the scoping keyword "in a project" this gives clear conditions for use, though it doesn't say when this listing should be preferred over other survey tools such as list_processes or list_projects.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.list_processesList processesA
Read-onlyIdempotent
Inspect

Paginated list of process models (Optimize module) in a project — name, status, step/connection counts, and any bound sprint/epic. Read-only.

NameRequiredDescriptionDefault
pageNo
limitNo
projectIdYesUUID of the project.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/destructiveHint=false, so 'Read-only' is redundant, but the description adds genuinely new information: results are paginated and each item carries status, step/connection counts, and any bound sprint/epic. With no output schema, that field inventory is the main behavioral disclosure. Pagination boundaries themselves live in the schema, not the prose.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence with the resource and module front-loaded, followed by the returned fields and a safety clause. Nothing is wasted and nothing important is buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 3-parameter read tool with annotations and no output schema, the definition covers scope, result shape, and safety. The only real gap is how it relates to get_process / list_process_insights, which an agent might need when choosing a tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33% — projectId is documented, page and limit have type/default/min/max but no prose. The description's 'paginated' and 'in a project' hint at the two undocumented parameters' roles but give no guidance on limit choice or paging behavior, so it only partially compensates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Paginated list of process models') and scopes it to a project and the Optimize module, which separates it from the many other stride list_* tools. It also enumerates the returned fields (name, status, step/connection counts, bound sprint/epic). It stops short of explicitly contrasting with get_process or list_process_insights, so 4 rather than 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: 'in a project' plus 'Read-only' tells the agent this is the enumeration entry point, but there is no explicit when-to-use, no mention of get_process for full detail, and no pointer to list_process_insights as the alternative for analytics. An agent must infer the routing itself.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.list_process_insightsList process insightsA
Read-onlyIdempotent
Inspect

Active (non-dismissed) Optimize insights for a project — bottlenecks, automation opportunities, risks, trends — ranked by impact. Optional processId filter. Read-only.

NameRequiredDescriptionDefault
limitNo
processIdNoOptional — filter to one process.
projectIdYesUUID of the project.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly/idempotent/non-destructive, so 'Read-only' in the description is redundant. However, the description does add genuine behavior beyond the annotations: results are ranked by impact, and the default scope excludes dismissed insights — both are material to interpreting the output.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that packs scope, content types, ordering, optional filter, and safety profile with zero filler. Every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully characterizes the return values (bottleneck/automation/risk/trend insights ranked by impact), which is what an agent needs to decide relevance. The only gap is pagination/limit behavior for a tool that can return up to 100 items.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67% and both processId and projectId are already documented in the schema; the description only restates the processId filter. The limit parameter (default 20, max 100) and its interaction with impact ranking are unexplained in both schema and description, so no value is added over the structured fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (Optimize insights for a project) and enumerates the content types returned — bottlenecks, automation opportunities, risks, trends — plus the ranking order. It distinguishes itself from a generic listing by specifying 'Active (non-dismissed)', though it never names the generating sibling run_process_insights.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Active (non-dismissed)' qualifier and 'Optional processId filter' imply this is a retrieval step after insights have been generated, but there is no explicit when-to-use guidance or pointer to run_process_insights as the tool that produces these insights. Usage must be inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.list_project_membersList project membersA
Read-onlyIdempotent
Inspect

List everyone who can access a Stride project, with their effective project role (OWNER / EDITOR / VIEWER) and where that access comes from: an explicit grant, their workspace-admin status, or a workspace-role baseline on a project that is open to the whole workspace. Use before assigning work, to check the person can actually open the project.

NameRequiredDescriptionDefault
projectIdYesProject UUID.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, non-destructive, and closed-world, so the safety profile is settled. The description adds genuinely new behavioral context: roles are *effective* roles derived from three distinct sources (explicit grant, workspace-admin, workspace-role baseline on open projects), which the agent cannot infer from the schema. It does not mention ordering, pagination, or handling of large rosters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler. The capability statement comes first and the usage trigger second, which is the right front-loading for an agent skimming tool lists. The parenthetical role enumeration earns its space by defining the returned values.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description partially discharges the return-value burden by naming the three role values and the three access provenance categories. It leaves unspecified whether results are paginated, sorted, or include workspace admins who have never touched the project. Given a one-parameter read tool, this is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter (projectId) with 100% schema description coverage ('Project UUID.'), so the schema already does the work. The description adds no format, resolution, or fallback guidance for the parameter. Baseline 3 is correct when the schema carries the burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List everyone who can access a Stride project') plus the scope of what is returned (effective role and access provenance). It is unambiguously distinct from add_project_member, remove_project_member, update_project_member_role, and list_projects without needing to name them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit usage trigger: 'Use before assigning work, to check the person can actually open the project.' That anchors the tool to a concrete workflow, though it stops short of stating when not to use it (e.g. versus the mutating member tools) or any permission prerequisites for reading the roster.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.list_projectsList projectsA
Read-onlyIdempotent
Inspect

Discovery tool, and the first one needed without a projectId: every other Stride tool requires projectId, and this is the only way to find one. Lists projects in the caller's workspace, scoped to the projects the integration creator has membership on. Filters: search (case-insensitive name contains), status (ACTIVE/COMPLETED/ARCHIVED). Returns id, name, prefix (e.g. "OTC" — composed with story numbers as "OTC-42"), description, status, deliveryTypes (array — projects can have multiple, e.g. ["CRM_IMPLEMENTATION", "INTEGRATION_IPAAS"]), and story / sprint counts. Soft-deleted projects are excluded. Read-only.

NameRequiredDescriptionDefault
pageNo
limitNo
searchNoCase-insensitive substring match on project name.
statusNoFilter by project lifecycle status.
deliveryTypesNoOptional set-intersection filter on delivery types. Project matches if ANY of its types appears in this list. Values are the SCREAMING_SNAKE enum names (see DeliveryType in schema.prisma).

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, and the description layers on real behavior: results are scoped to the caller's workspace and to projects the integration creator is a member of, and soft-deleted projects are excluded. Those access-scoping and exclusion rules are the kind of detail an agent cannot infer from the safety hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single dense paragraph with the critical 'no projectId needed' fact front-loaded. The return-field enumeration is long but useful given no output schema; a slight trim of the example clutter would help.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description correctly enumerates the returned fields (id, name, prefix semantics, status, deliveryTypes, counts) and pairs that with scoping and exclusion rules. Only pagination behavior is left implicit, which the schema's defaults and bounds largely cover.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 60%, and the description compensates by restating the search semantics (case-insensitive name contains) and status values, plus explaining deliveryTypes as a multi-value set-intersection filter with example enum names. It adds little for page/limit, which remain undocumented beyond their numeric bounds.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Lists projects') and immediately establishes its unique role among siblings: it is the only tool that does not require a projectId. An agent can distinguish it from stride.list_project_members or stride.whoami without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says it is the discovery tool and the mandatory first call because every other Stride tool needs a projectId. That is a precise when-to-use rule with the alternative ('nothing else gives you an id') named outright.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.list_quality_gatesList quality gatesA
Read-onlyIdempotent
Inspect

List quality gates in a Stride project. Returns a compact shape (id, name, status, gateType, createdAt, criteriaCount, enabledCriteriaCount, configState) — use stride.get_quality_gate for the full criteria + recent evaluation history. configState NOT_CONFIGURED / NOT_ENFORCED means the gate measures nothing and fails CLOSED: its status is not a breach. Default limit 20, max 50.

NameRequiredDescriptionDefault
limitNo
projectIdYesProject UUID.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, yet the description adds genuine context they cannot: the compact return shape (id, name, status, gateType, criteriaCount, enabledCriteriaCount, configState) and the crucial semantic that unconfigured gates 'fail CLOSED' so their status is not a breach. That is a behavioral caveat an agent could easily get wrong. It falls short of 5 only because it omits pagination/ordering behavior for the list itself.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and tightly packed via em-dashes; every clause carries information (purpose, return shape, alternative, semantics caveat, limits). Slightly dense for a scanner, but no filler sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description carries the return-shape burden and does so explicitly, plus the configState interpretation caveat and result-size limits. Nothing an agent needs to call it correctly and read the response correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: projectId is documented in the schema, and limit carries minimum/maximum/default constraints there. The description's 'Default limit 20, max 50' largely restates the schema rather than adding syntax or guidance, so it adds only marginal value over structured fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List quality gates in a Stride project') and immediately distinguishes itself from the sibling read tool stride.get_quality_gate by scope. An agent can tell list vs. detail apart without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the alternative and the condition that selects it: 'use stride.get_quality_gate for the full criteria + recent evaluation history.' It also tells the agent how to interpret a NOT_CONFIGURED/NOT_ENFORCED status, which prevents a misdiagnosis downstream.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.list_recent_activityList recent activityA
Read-onlyIdempotent
Inspect

List recent activity across a whole project (newest-first) — "what changed / what moved to Done this week". Optional filters: action (e.g. STORY_STATUS_CHANGED, STORY_UPDATED), entityType (story/defect/sprint/epic), since (ISO timestamp). For a single story's feed use stride.list_story_activity.

NameRequiredDescriptionDefault
limitNo
sinceNoISO timestamp — only rows at/after it.
actionNoActivity action filter, e.g. STORY_STATUS_CHANGED.
projectIdYesProject UUID.
entityTypeNoEntity type filter, e.g. story, defect, sprint, epic.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so safety is covered. The description adds ordering (newest-first) and scope (whole project) that annotations cannot express; it stops short of describing the row shape or actor fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One front-loaded sentence gives purpose, ordering and scope, followed by filters and the sibling redirect. No filler and nothing buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description should hint at what a row contains; it only implies a feed of activity events. Still, purpose, filters, ordering and the alternative are all covered, so an agent can call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 80%, and the description adds value by giving example filter values (STORY_STATUS_CHANGED, STORY_UPDATED) and enum-like entity types (story/defect/sprint/epic) that the schema only gestures at. It does not mention the limit parameter or default page size, leaving a small gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (list recent activity), the scope (whole project, newest-first), and explicitly contrasts with the per-story sibling stride.list_story_activity. An agent can pick between the two without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete usage framing ("what changed / what moved to Done this week") and an explicit routing rule: for a single story's feed use stride.list_story_activity. Use and alternative are both named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.list_releasesList releasesA
Read-onlyIdempotent
Inspect

List releases in a Stride project with an optional status filter. Returns a compact shape — use stride.get_release for the full release with storyIds and release-notes flag. Defaults: limit 20, max 50.

NameRequiredDescriptionDefault
limitNo
statusNo
projectIdYesProject UUID.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, closed-world, so the safety profile is covered. The description adds value beyond that by disclosing the return shape is compact (not full detail) and the pagination defaults/cap. It doesn't cover auth or pagination mechanics beyond the limit bounds, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with purpose, then the alternative-tool pointer, then defaults. Every sentence carries distinct information with no repetition of the title or schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, but the description signals the return shape is compact and redirects to get_release for full data, which is sufficient for correct tool selection. Minor gap: it doesn't state sort order or whether results are paginated beyond the limit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33% (only projectId documented), so the description must compensate — and it does: it explains the status filter and states limit defaults (20) and max (50), which are not spelled out in prose in the schema. The enum values themselves are left to the schema, which is acceptable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (List) plus resource (releases in a Stride project) with an explicit scope note (optional status filter). It also distinguishes itself from stride.get_release, so an agent can separate the two without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the alternative tool explicitly (stride.get_release) and states the condition that selects it — needing storyIds or release-notes flag. That is a genuine when-to-use-this-vs-that routing rule, not just implied context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.list_sprintsList sprintsA
Read-onlyIdempotent
Inspect

List sprints in a Stride project. Filters: status (PLANNING/ACTIVE/COMPLETED/CANCELLED). Returns name, status, goal, dates, and the count of stories on each sprint now. Closing a sprint can move its unfinished stories out, so a COMPLETED sprint also carries storiesAtClose / doneStoriesAtClose, the counts it closed with (null when not recorded).

NameRequiredDescriptionDefault
pageNo
limitNo
statusNo
projectIdYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), but the description adds genuine behavioral context: it explains that counts are current, that closing a sprint can move unfinished stories, and why COMPLETED sprints carry storiesAtClose/doneStoriesAtClose with nulls when unrecorded. That is real interpretation guidance not derivable from annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the core operation, then the filter, then the more subtle return-value caveat. Every sentence carries information, though the return-field enumeration is dense and could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description correctly spends effort describing the return shape (name, status, goal, dates, story counts, plus close-time counts). The main gap is pagination behavior and how status omission affects results, but the core contract is well covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must carry parameter meaning, and it only partially does: it documents the status filter's meaning and enumerates values (redundant with the schema enum) and implies projectId via "in a Stride project". Pagination parameters (page, limit) are never mentioned, leaving half the parameters undocumented anywhere.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ("List sprints in a Stride project") and names the supported filter, so an agent can immediately grasp the operation. It doesn't explicitly contrast itself with siblings like stride.get_sprint or stride.get_sprint_metrics, but the list-vs-get distinction is implicit in the verb.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the tool lists sprints and filters by status. There is no explicit guidance on when to prefer this over stride.get_sprint (single sprint detail) or stride.get_sprint_metrics, and no mention of prerequisites such as needing a valid projectId.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.list_storiesList storiesA
Read-onlyIdempotent
Inspect

List stories in a Stride project with optional filters. Each story includes its displayId (ticket key, e.g. "ORB-526") — refer to stories by that, not the UUID. Filter by status (a category — TODO/IN_PROGRESS/IN_REVIEW/DONE — OR a board column name from stride.list_workflow_stages) or by stageId (an exact column). Use stride.get_story for a full story with acceptance criteria. Defaults: page 1, limit 20, max 50.

NameRequiredDescriptionDefault
pageNo
typeNo
limitNo
epicIdNoEpic UUID filter.
searchNoSubstring search on title.
statusNoA category (TODO/IN_PROGRESS/IN_REVIEW/DONE — filters by category) OR the exact name of a column from stride.list_workflow_stages (filters by that column).
backlogNoIf true, only stories without a sprint.
stageIdNoBoard-column (workflow stage) UUID — exact column filter.
priorityNo
projectIdYesProject UUID.
assigneeIdNoUser UUID for assignee filter.

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint/idempotentHint/destructiveHint already declaring the safety profile, the description usefully adds the displayId-referencing convention and default/max page sizing. It does not, however, say how results are ordered, what the pagination envelope looks like, or how many results trigger a next page.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four compact sentences, front-loaded with purpose and identity convention, then the disambiguation rule, then the alternative tool, then defaults. No redundant restatement of the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 11-parameter list tool with no output schema, the description supplies the result-shape hint (each story carries a displayId) and pagination defaults, which covers most of what an agent needs. Ordering and total-count semantics remain unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 64%, and the description closes the most dangerous gap: it explains that status accepts either a category or a board column name and that stageId is an exact column. It also states defaults (page 1, limit 20, max 50). Type, priority, epicId, assigneeId and backlog are left to schema descriptions, which is acceptable at this coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("List stories in a Stride project") plus scope (optional filters), and distinguishes itself from siblings by naming stride.get_story for full detail and stride.list_workflow_stages as the source of column names.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit guidance on which filter to use for each intent (status category vs stageId exact column) and routes to stride.get_story for acceptance criteria. It does not mention stride.search_stories, which an agent could reasonably confuse with this tool, so it stops short of full alternative coverage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.list_story_activityList story activityA
Read-onlyIdempotent
Inspect

List the activity feed for a story (newest-first). Each row carries the action type, the acting user (id/name/image), metadata, and timestamp. Useful before deciding whether to act on a story (e.g. "has someone already commented?").

NameRequiredDescriptionDefault
limitNo
storyIdYesStory ticket key like "ORB-526" or a Stride UUID.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already carry the read-only, idempotent, closed-world, non-destructive profile, and the description adds real value on top: newest-first ordering and the exact shape of each row (action type, acting user id/name/image, metadata, timestamp). No output schema exists, so this return-shape disclosure matters. Pagination behavior beyond the limit parameter is not covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences; the operation and ordering lead, then row contents, then the use case. No filler, though the parenthetical example adds marginal cost for the guidance it delivers.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with no output schema and only two parameters, the description covers purpose, ordering, and record fields — enough to call it correctly. Gaps are minor: no pagination/cursor note and no differentiation from the other activity/comment list tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: storyId is documented as accepting a ticket key like 'ORB-526' or a UUID, while limit is documented only by its default/min/max constraints. The description mentions no parameters at all, so it adds nothing beyond the schema — baseline 3 fits for a 2-parameter tool whose schema does most of the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List the activity feed for a story') plus the ordering guarantee (newest-first). It does not name the near-siblings stride.list_recent_activity or stride.list_comments, so an agent must infer the boundary, but the core operation is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It offers a motivating scenario ('useful before deciding whether to act on a story... has someone already commented?'), which implies when to call it. However, that example actually points at stride.list_comments, and no when-not or alternative-selection guidance is given for list_recent_activity or list_comments.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.list_story_relationsList story relationsA
Read-onlyIdempotent
Inspect

List the outgoing and incoming relations for a story. Returns both arrays in one call. Each row carries the related story compact shape (id, title, status, priority, type) so the agent can render a dependency tree without a per-row get_story call.

NameRequiredDescriptionDefault
storyIdYesStory ticket key like "ORB-526" or a Stride UUID.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description adds genuinely useful behavioral context beyond that: it returns both relation arrays in a single call and each row carries a compact story shape, removing the need for follow-up calls.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core action and directionality, followed by return shape and the payoff. No filler or repetition of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description correctly compensates by naming both returned arrays and the per-row compact story fields. Ordering, pagination, and empty-result behavior are not mentioned, which is a minor remaining gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a single required parameter whose description already explains both ticket-key and UUID formats. The prose adds no further detail about storyId, so the schema does the work and baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (story relations) with explicit scope: both outgoing and incoming directions. It is clearly separable from create_story_relation, delete_story_relation, get_story, and list_stories.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implicitly says to use this instead of fanning out per-row get_story calls to build a dependency tree, which is a concrete usage context. It lacks an explicit 'when not to use' or a named alternative for fetching full story detail, 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.

stride.list_test_casesList test casesA
Read-onlyIdempotent
Inspect

List test cases in a Stride project with optional filters (suiteId, storyId, status, type, assigneeId, title search). Rows carry storyId so coverage questions need no per-case read. Compact shape — use stride.get_test_case for full steps + expected result. Defaults: page 1, limit 20, max 50.

NameRequiredDescriptionDefault
pageNo
typeNo
limitNo
searchNoSubstring search on title.
statusNo
storyIdNoStory ticket key like "ORB-526" or UUID — only cases bound to that story.
suiteIdNoTest suite UUID filter.
projectIdYesProject UUID.
assigneeIdNoUser UUID for assignee filter.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety needs no restating. The description adds genuinely useful behavior beyond that: rows are a compact shape missing steps/expected result, rows carry storyId, and page/limit defaults with a hard max of 50. Pagination metadata (total counts, sort order) remains undisclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with purpose and filters before the routing hint and defaults. The storyId/coverage note and the compact-shape warning each carry distinct decision-relevant information, so nothing reads as filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter read tool with no output schema, the description covers purpose, filter set, response shape and the escape hatch to the detail tool. The remaining gap is pagination behavior (ordering, total count) which an agent paging past 50 results would want.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 56% schema coverage, the description partly compensates by enumerating the filter set (suiteId, storyId, status, type, assigneeId, title search) and stating page/limit defaults and the 50 cap. However, it mostly echoes schema property names and adds no semantics for the enum values or how filters combine, so it is baseline-adequate rather than additive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List test cases in a Stride project') plus the filter surface, so the agent knows exactly what it retrieves. It also explicitly contrasts itself with stride.get_test_case, which returns full steps and expected result, making the boundary between the two unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the alternative tool and the condition that selects it ('use stride.get_test_case for full steps + expected result'), and signals that this list is sufficient for coverage questions via storyId. It stops short of covering adjacent alternatives like list_test_suites or list_test_runs, so it is clear but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.list_test_plansList test plansA
Read-onlyIdempotent
Inspect

List test plans in a Stride project (newest-first). Compact shape — id, name, status, targetDate, startedAt, completedAt. Filter by status. Default limit 20, max 50.

NameRequiredDescriptionDefault
limitNo
statusNo
projectIdYesProject UUID.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/idempotentHint/closed-world, so the safety profile is covered. The description adds genuinely new behavior: newest-first ordering, the compact projection of returned fields, and the pagination ceiling of 50 — context an agent cannot get 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three densely packed sentences: purpose and ordering first, returned field shape second, filtering and pagination last. Nothing is redundant with the tool name and every clause adds usable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description supplies the returned field list, ordering, and pagination behavior — enough to call and interpret results. Only edge cases (empty result behavior, error conditions) are unaddressed, which is acceptable for a simple read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33% (only projectId is documented), so the description must compensate — and it does for limit ('Default 20, max 50') and for status filtering. It stops short of enumerating the DRAFT/ACTIVE/COMPLETED values, though the schema already carries the enum, so the gap is minor.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List test plans in a Stride project') plus ordering ('newest-first'), so the agent knows exactly what it returns. It does not explicitly differentiate from close siblings like list_test_runs or list_test_suites, which a 5 would require.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description notes status filtering and limit bounds, which implies how to narrow results, but it never says when to choose this over list_test_runs/list_test_cases or what conditions warrant a status filter. Usage is inferable rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.list_test_resultsList test resultsA
Read-onlyIdempotent
Inspect

List the individual result rows for a Stride test run. Each row carries the verdict (status), duration, notes, executedAt, the test case (id/title) and the linked defect (defectId + defect {id,title,severity,status}) set by record_test_results. Filter by status — e.g. status=FAILED to fetch just the failing cases. Ordered by status then createdAt. Default limit 50, max 200.

NameRequiredDescriptionDefault
limitNo
statusNo
testRunIdYesThe Stride test run UUID.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent and non-destructive. The description adds value beyond them: the sort order ('status then createdAt'), the default and maximum page size (50/200), and the exact shape of each returned row. No pagination cursor or truncation behavior is disclosed, keeping it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences, each carrying distinct information: resource scope, row shape, filtering guidance, ordering, and paging limits. The purpose is front-loaded and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, describing the row fields is essential and is done well. Combined with ordering and paging limits, an agent has nearly everything needed. Missing only how results relate to parent run retrieval and whether the limit is a hard truncation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33%, so the description must compensate — and it does, documenting the limit default/max and the status filter with a concrete enum example. Only testRunId is left to the schema, which already describes it as a UUID.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'List the individual result rows for a Stride test run', which is clearly distinct from run-level listing (list_test_runs). It also enumerates the row payload, but never names a sibling tool, so the differentiation is implied rather than explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Filter by status — e.g. status=FAILED to fetch just the failing cases' gives a concrete usage scenario. It also clarifies provenance by saying the defect link is 'set by record_test_results'. It stops short of saying when to prefer this over get_test_run or list_test_runs for summaries.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.list_test_runsList test runsA
Read-onlyIdempotent
Inspect

List test runs in a Stride project (newest-first). Compact shape — id, name, status, environment, executedAt, createdAt, suiteId. Filter by status or suiteId. Use stride.get_test_run for a per-run result summary. Default limit 20, max 50.

NameRequiredDescriptionDefault
limitNo
statusNo
suiteIdNoTest suite UUID filter.
projectIdYesProject UUID.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/closed-world, so the safety profile is free. The description adds meaningful behavior beyond that: result ordering (newest-first), the compact field shape, and the limit bounds (default 20, max 50), which tells the agent truncation is possible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four dense sentences, zero filler. Purpose and ordering come first, then return shape, then filtering, then the sibling redirect, then limits — each sentence carries a distinct, useful fact.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description takes on the job of describing the return shape and does so by enumerating the compact fields. Combined with filter options, ordering, and limit bounds, an agent has everything needed to call this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50% — limit and status have no schema descriptions — but the description compensates by stating the default (20) and max (50) for limit and by naming status and suiteId as the two filters. Format/encoding of the UUID filters is still unspecified, so not a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource ("List test runs in a Stride project") with a stated ordering (newest-first) and scope. It explicitly separates itself from stride.get_test_run, though it does not address the nearest sibling, stride.list_test_results, leaving the agent to infer which listing returns which entity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear usage context (filter by status or suiteId) and routes the agent to stride.get_test_run when per-run result detail is needed. It stops short of explicit exclusions or prerequisites, so a 4 rather than a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.list_test_suitesList test suitesA
Read-onlyIdempotent
Inspect

List test suites in a Stride project (newest-updated first). Compact shape — id, name, description, testCaseCount (non-deleted cases). Default limit 20, max 50.

NameRequiredDescriptionDefault
limitNo
projectIdYesProject UUID.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, so safety is covered. The description adds real behavior beyond that: sort order (newest-updated first), a compact response shape with named fields, a definition of testCaseCount excluding deleted cases, and the limit's default and ceiling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short clauses, front-loaded with the core action and scope, followed by return shape and pagination limits. No redundant restatement of the title and nothing that fails to earn its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description supplies the returned field list and the testCaseCount semantics, plus ordering and result-count bounds. For a two-parameter read-only list tool this covers everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: projectId is documented as a UUID while limit carries only machine constraints. The description compensates by explaining that limit defaults to 20 and caps at 50, giving the agent the practical bound that the schema alone only encodes as min/max.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("List test suites") scoped to a Stride project, which clearly separates it from create/update/delete_test_suite and from list_test_cases/list_test_runs. It does not explicitly name a sibling or contrast with get_test_suite, so sibling differentiation is implicit rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the verb and the project scoping, but there is no explicit when-to-use guidance, no mention of when to prefer a single-suite fetch, and no prerequisites or exclusions. Adequate but leaves routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.list_workflow_stagesList workflow stagesA
Read-onlyIdempotent
Inspect

List a project's board columns (workflow stages) in order. A project may have custom columns beyond the default To Do / In Progress / In Review / Done — call this to see the exact column names before moving an issue into one by name. Each column has a name, an immutable category (TODO / IN_PROGRESS / IN_REVIEW / DONE — drives analytics; a DONE-category column is a "done" column), position, color, wipLimit, isDefault (where new issues land), and system (one of the 4 seeded backbone columns). The status tools accept either a category token OR one of these column names/ids. Read-only.

NameRequiredDescriptionDefault
projectIdYesProject UUID.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only/idempotent safety, so the description spends its budget on substance: it enumerates the returned fields, explains that category is immutable and drives analytics, and clarifies that isDefault marks where new issues land and system marks the seeded backbone columns. With no output schema, this is exactly the disclosure needed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then usage, then return shape, then interop, then safety. Sentences are dense but each carries information; the field enumeration is long but justified by the absence of an output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter read tool with no output schema, the description covers purpose, trigger, return field semantics, and downstream interoperability. Nothing material an agent needs before calling it is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter, projectId, and schema coverage is 100% with a clear 'Project UUID.' description. The tool description adds nothing about the parameter, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

First sentence gives a specific verb and resource ('List a project's board columns'), names the domain alias (workflow stages), and states ordering. It distinguishes itself from the status-mutation siblings by explaining that it supplies the column names those tools accept.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states the trigger: call this to discover exact column names 'before moving an issue into one by name,' and notes custom columns may exist beyond the defaults. It points at the consuming tools but doesn't name them by handle (e.g., update_story_status) or state when listing is unnecessary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.next_taskPick up next taskAInspect

Pull your next story to implement: the most recent one a human staged for you (via "Stage for my agent" in Stride) or, when nothing is staged, the top story assigned to you that is still to do (active sprint first, then priority). Takes no arguments: it resolves your projects and identity from your agent key. Returns the story with its FULL context (acceptance criteria, designs, docs, relations, linked PRs) in one call, the same shape as get_story_context, plus source: "staged" or "assigned". A staged story is marked consumed so you get a fresh task next time; an assigned one stays the top until its status changes, so move it to IN_PROGRESS when you start. Returns an empty-inbox message when there is neither. Call it when the user says "work on my next Stride task".

NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses important side effects beyond the annotations: a staged story is marked consumed, an assigned story remains the top until status changes, and the tool returns an empty-inbox message when neither exists. It also explains identity/project resolution from the agent key and the return shape, all consistent with readOnlyHint=false and 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but front-loaded: it starts with the core action and then layers selection logic, side effects, return shape, and usage trigger without redundant sentences. Every sentence contributes to correct invocation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description explains the returned story context, the source field, and the empty-inbox case. For a no-parameter tool with fallback selection and a consumption side effect, an agent has everything needed to call and interpret it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, so the baseline is 4, and the description appropriately states that the tool takes no arguments and resolves projects and identity from the agent key. That adds useful context beyond the empty schema without needing parameter-level semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: pulling the next story to implement, with explicit staged-vs-assigned selection logic. It clearly distinguishes this tool from siblings like get_story, list_stories, and get_story_context by describing its unique selection and return behavior.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear usage trigger: 'Call it when the user says "work on my next Stride task"' and explains the staged/assigned fallback. It does not explicitly name alternatives to use instead or when not to use this tool, so it stops short of full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.prepare_modernization_backlogPrepare modernization backlogAInspect

Prepare a modernization backlog from an ANALYZED legacy system's generated requirements (Modernize, Optimize module): creates a pre-extracted PRD-wizard document in the system's own project and returns the wizard link for a HUMAN to review and approve. Never creates stories itself — the staged wizard review is human-only by design. Without force, an existing modernization document for the system is returned instead of creating a duplicate.

NameRequiredDescriptionDefault
forceNoCreate a new document even when one already exists for this system (default false).
legacySystemIdYesUUID of the legacy system.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond the annotations: what is created, where it lands, that a link is returned, that a human must approve, and that no stories are created. The non-force dedupe behavior is real behavioral disclosure the annotations don't convey. Minor tension: returning an existing document on repeat calls reads as idempotent, while idempotentHint is false — worth noting but not a contradiction, since force does create new artifacts.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and its output, then the human-review constraint, then the force semantics — a logical order with no filler. Slightly dense with capitalized emphasis tokens (ANALYZED, Modernize, Optimize, HUMAN), but each sentence carries distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly covers the return value (wizard link) and the side effect (document creation in the system's project), which is what an agent needs. It doesn't specify failure behavior when the system isn't yet ANALYZED, nor what the non-force path returns exactly, leaving a small gap for a workflow-gating tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both parameters documented including force's default. The description's restatement of the non-force dedupe path confirms the intent but adds nothing the schema lacks, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (prepare a modernization backlog) and immediately binds it to a precise mechanism: a pre-extracted PRD-wizard document created in the legacy system's own project, plus the wizard link. It also distinguishes itself from the obvious sibling confusion by saying 'Never creates stories itself', so an agent can separate it from create_story/create_document.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear preconditions — the legacy system must be ANALYZED and the operation belongs to the Modernize/Optimize module — and explains the human-approval gate, so the agent knows this is a staging step rather than an autonomous one. It stops short of naming the sibling to use instead when the system is not analyzed or when raw stories are wanted.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.record_test_resultsRecord test resultsAInspect

Record up to 200 test results against a single run in one call. Each result is { testCaseId, status (PASSED|FAILED|BLOCKED|SKIPPED), duration?, notes?, defectId? }. UPSERTs on (run, case) so re-marking a case is idempotent; updates each case's last-result status. defectId is persisted on the result row — read it back with stride.list_test_results (per row) or stride.get_test_run (linkedDefects). Cases outside the run's project land in notFound; a defect outside the run's project rejects the whole batch. Set completeRun=true only on the final batch to atomically mark the run COMPLETED, timestamp it, and make it eligible for quality gates; the default false keeps partial batches open. Returns applied / notFound arrays + per-status counts. Optional environment + pairKey stamp the run in the same call (Modernize behavioural parity).

NameRequiredDescriptionDefault
pairKeyNoOptionally stamp the run pairKey while recording — the shared key linking a baseline run to its target run.
resultsYes
testRunIdYesUUID of the test run.
completeRunNoFinalize the run atomically with this batch. Leave false for partial batches.
environmentNoOptionally stamp the run environment while recording — "legacy-baseline" or "target" for Modernize parity.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: upsert semantics, the notFound bucket for out-of-project cases, whole-batch rejection when a defect is outside the run's project, run-completion side effects, and the return shape. One caveat keeps it from a 5: "re-marking a case is idempotent" sits in tension with idempotentHint=false; it is scoped to the row upsert (the run-level completeRun/timestamping is why the tool as a whole is not idempotent), but the scoping is implicit and an agent could misread it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense and front-loaded — the batch/upsert statement comes first and every clause carries operational meaning. It is a single run-on paragraph, though, and the closing "Optional environment + pairKey stamp the run" sentence is the weakest, adding little over the schema's own parameter descriptions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but the description compensates by stating the return shape (applied/notFound arrays plus per-status counts). For a mutation tool it covers the failure modes an agent needs (notFound vs whole-batch rejection) and the atomic completion flag, leaving nothing material unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 80%, so the baseline is 3, and the description earns an upgrade: it explains what defectId persistence actually means (read back via list_test_results or get_test_run.linkedDefects) and spells out the completeRun side effects (mark COMPLETED, timestamp, quality-gate eligibility) beyond the terse schema text. It repeats some schema-visible facts (status enum, 200 max, result object shape) and the final environment/pairKey sentence largely echoes those parameters' own descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Record up to 200 test results against a single run") plus the batch scope and the upsert key (run, case). It distinguishes itself from create_test_run and from the read-back siblings (list_test_results, get_test_run) without the agent needing to open another schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells the agent when to set completeRun=true (final batch only, atomic COMPLETED transition, quality-gate eligibility) and that the default false keeps partial batches open. It also routes reading to the right alternatives (list_test_results per row, get_test_run for linkedDefects), which is real when-to-use guidance rather than restated purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.refine_ui_designRefine UI designAInspect

Refine one option of an existing UI design with a natural-language instruction — appends a new version (the prior version is kept). Identify the design by UUID and the option by its key (A/B/C…). Can take up to ~4 minutes, longer than many MCP clients wait. If it is still running after about 52 seconds this tool answers "still running" with a toolCallId and finishes in the background, saving the result when done. Meanwhile a repeat call for the same story (for a refine, the same option) starts nothing and answers "still running" again; stride.get_tool_call_status follows the run: given that toolCallId and waitSeconds 40 it waits for the run (a 3-minute run takes about 5 calls) and returns the result once it is saved, or says it failed. Cancelling the call before it answers stops the run and saves nothing.

NameRequiredDescriptionDefault
designIdYesUUID of the UI design.
optionKeyYesOption key to refine (e.g. "A").
instructionYesWhat to change (e.g. "make the header sticky, warmer accent").

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: appends a new version and keeps the prior one (clarifying that destructiveHint=false while the call still mutates), gives the ~4 minute runtime, the ~52 second cutoff after which it returns a toolCallId and finishes in the background, and states that cancelling before it answers saves nothing. That is exactly the timing, async and cancellation context an agent cannot get from readOnlyHint/openWorldHint/idempotentHint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core operation, then the async protocol, then cancellation — a sensible order with no filler. It is dense and somewhat run-on in the async section, but nearly every clause carries operational meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description covers what an agent needs: what comes back on success ('still running' plus toolCallId), how to retrieve the eventual result, how many polls a long run takes, and what happens on failure or cancellation. Nothing material is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so designId, optionKey and instruction are already documented. The description only restates them (UUID for the design, key A/B/C for the option) without adding format or constraint detail, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: refine one option of an existing UI design with a natural-language instruction, and says it appends a new version rather than replacing. It implicitly contrasts with stride.generate_ui_design by scoping to an existing design, and the designId/optionKey/instruction framing makes the operation unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent to stride.get_tool_call_status when the tool answers 'still running', and warns that repeating the same call starts nothing. It stops short of naming generate_ui_design as the alternative for creating a new design from scratch, but the 'existing' qualifier carries most of that.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.remove_project_memberRemove project memberA
DestructiveIdempotent
Inspect

Remove a person's explicit access to a Stride project. On an invite-only project this revokes their access entirely. On a project open to the whole workspace it only drops them back to what their workspace role gives them.

NameRequiredDescriptionDefault
memberYesWorkspace member — user UUID or email address.
projectIdYesProject UUID.

TDQS

A4.2/5.0
Behavior4/5

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 real value beyond that by explaining what 'destructive' means here — access is revoked entirely on invite-only projects but only reverts to workspace-role access on open ones. It does not mention permission requirements or self-removal behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core action, then the two contextual cases. No wasted words or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutation with full schema coverage and annotations covering safety and idempotency, the description provides enough to call it correctly. Minor gaps: no mention of who may perform the removal or what happens if the member is not a project member.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both member (UUID or email) and projectId documented in the schema. The description adds no additional parameter semantics, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Remove) and resource (a person's explicit access to a Stride project) with precise scope — 'explicit access' distinguishes it from role changes. An agent can distinguish it from stride.add_project_member and stride.update_project_member_role 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains the outcome in context: full revocation on invite-only projects vs. fallback to workspace role on open projects, which implies when this is the right tool vs. a role downgrade. It does not explicitly name update_project_member_role as the alternative for partial downgrades, so it stops short of full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.rerun_failed_testsRerun failed testsAInspect

Create a child test run seeded with the failed + blocked cases of a parent run (parentRunId links the chain). Inherits the parent suite + environment; each eligible case is seeded BLOCKED. Soft-errors when the parent had no failing or blocked cases. Returns the new run id + retried count.

NameRequiredDescriptionDefault
testRunIdYesUUID of the parent test run.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only tell the agent this is a non-destructive, non-idempotent write; the description goes well beyond that by disclosing inheritance of suite + environment, that each eligible case is seeded BLOCKED, the soft-error condition, and the return payload. These are exactly the behaviors an agent needs before invoking an irreversible create.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences, zero filler, front-loaded with the create action and scope before the inheritance, seeding, and error details. Every clause carries information an agent would otherwise have to guess.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description supplies the return shape (new run id + retried count) as well as the failure mode. For a single-parameter create tool, nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and only one parameter exists, so the baseline is 3; the description adds real meaning by explaining that testRunId becomes the parentRunId linking the run chain and drives inheritance of suite and environment, which the schema's "UUID of the parent test run" does not convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource with scope: "Create a child test run seeded with the failed + blocked cases of a parent run." It clearly distinguishes itself from the sibling create_test_run, which creates an unseeded run, by naming the seeded subset and the parent-child link.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The name and first sentence make the use case (retrying failures from an existing run) obvious, and it gives an explicit when-not: "Soft-errors when the parent had no failing or blocked cases." It stops short of naming create_test_run as the alternative for a fresh unrelated run, so not a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.restore_defectRestore defectA
Idempotent
Inspect

Restore a soft-deleted defect within the grace window. Idempotent on an already-active row.

NameRequiredDescriptionDefault
defectIdYesUUID of the defect.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds useful behavioral context beyond the annotations: restoration is constrained to a grace window, and idempotency applies specifically to an already-active row. It does not describe permissions or failure behavior outside the grace window, but the annotations already cover the safety profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The definition is two focused sentences with the core action and constraint front-loaded. Every sentence contributes useful information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter restore operation with strong annotations, the description covers the essential constraints and idempotency behavior. It could be slightly more complete by stating what happens outside the grace window, but no critical invocation detail is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 100% description coverage and documents the single defectId parameter as a UUID. The 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: restoring a soft-deleted defect. It also scopes the operation to the grace window, making it distinguishable from permanent deletion, updates, or ordinary retrieval.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly indicates when this tool applies: for a soft-deleted defect still within the grace window. It does not explicitly name alternatives such as update_defect or delete_defect, but the applicable condition is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.restore_designRestore designA
Idempotent
Inspect

Restore a soft-deleted UI design (clears deletedAt). Idempotent on an already-active row.

NameRequiredDescriptionDefault
designIdYesUUID of the UI design.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=false, but the description adds real context: the underlying mechanism is clearing deletedAt, and it spells out what idempotency means concretely (an already-active row is left as-is). What it omits is whether the restore requires specific permissions or whether related links/attachments are restored alongside the design.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero filler, and the core action is front-loaded before the idempotency caveat. Nothing could be removed without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, non-destructive mutation with rich annotations and a fully documented schema, the description covers what an agent needs to call it correctly. The only gap is that no output schema exists, so the return shape (e.g., the restored design object) is not described anywhere.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter, and the schema documents it at 100% coverage ('UUID of the UI design'). The description adds no format hints, validation rules, or failure behavior for an invalid or hard-deleted designId, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (restore) plus specific resource (soft-deleted UI design), and the parenthetical '(clears deletedAt)' pins down the exact effect. Among the many restore_* siblings the resource noun alone disambiguates it from restore_diagram, restore_process, etc.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'soft-deleted UI design' implies the precondition and 'idempotent on an already-active row' tells the agent it is safe to call on a live design, which is useful guidance. However, it never states when to prefer this over re-creating or updating a design, nor names any alternative tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.restore_diagramRestore diagramA
Idempotent
Inspect

Restore a soft-deleted architecture diagram (clears deletedAt). Idempotent on an already-active row.

NameRequiredDescriptionDefault
diagramIdYesUUID of the diagram.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true, destructiveHint=false and non-readOnly; the description reinforces this with concrete behavior ('Idempotent on an already-active row') and explains the side effect (clears deletedAt). It stops short of describing error behavior for a nonexistent diagramId or any 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and immediately followed by the key operational caveat. 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.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter mutation with rich annotations and no output schema, the description covers what changes and the idempotency nuance. The main remaining gap is what happens on a bad/unknown ID (error vs. no-op), which matters for safe retry logic.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter with 100% schema description coverage ('UUID of the diagram'), so the schema already carries the semantics. The description adds nothing about the parameter beyond the concept of a deleted diagram, which is the expected baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Restore a soft-deleted architecture diagram') and clarifies the underlying mechanism ('clears deletedAt'), so an agent knows this un-deletes rather than creates. It does not name sibling alternatives (e.g. stridedelete_diagram or get_diagram), but the operation is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: call this when a diagram was soft-deleted and should be brought back. There is no explicit statement of when not to use it, nor guidance on preconditions (e.g. checking via get_diagram that the row is actually deleted) or what to do if the ID is unknown.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.restore_epicRestore epicA
Idempotent
Inspect

Restore a soft-deleted epic. Stories the delete unlinked are re-linked if they are still unassigned (a story moved to another epic meanwhile stays there); the count is returned as relinkedStoryCount. Idempotent on an already-active row.

NameRequiredDescriptionDefault
epicIdYesUUID of the epic.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=false, so the description earns credit for the genuinely non-obvious detail: deleted stories are re-linked only if still unassigned, and a story reassigned meanwhile stays put. It also names the relinkedStoryCount return value, which is the only handle an agent has given there is 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action, then the cascade rule, then idempotency. No filler and no repetition of the schema or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter mutation with no output schema, the description covers the action, the side effects on related stories, the returned count, and retry safety. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a single required epicId, so the schema fully carries parameter meaning and the description adds nothing beyond it. Baseline 3 applies; a note such as 'epicId must reference a soft-deleted row' would have raised this.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Restore a soft-deleted epic'), and 'soft-deleted' usefully narrows it to the undo path. It does not explicitly name a sibling such as delete_epic or update_epic, but the restore_* family and the resource noun make it unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: an agent can infer it should call this when an epic was deleted and needs undoing, and the idempotency note tells it retrying is safe. There is no explicit 'use this instead of X' guidance or prerequisite/permission statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.restore_processRestore processA
Idempotent
Inspect

Restore a soft-deleted BPMN process model (clears deletedAt). Idempotent on an already-active row.

NameRequiredDescriptionDefault
processIdYesUUID of the process model.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and idempotentHint=true; the description adds useful context by explaining the mutation is a soft-delete reversal (clears deletedAt) and clarifying idempotency is specifically 'on an already-active row' rather than repeating the hint verbatim.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, scope and effect front-loaded ahead of the idempotency nuance. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter restore tool with full schema coverage and annotations covering safety/idempotency, the description provides enough to invoke correctly. A note on permissions or the resulting state after restore would make it fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With one parameter at 100% schema description coverage (processId UUID documented), the schema does the heavy lifting. The description adds no parameter-level detail, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (restore) and resource (soft-deleted BPMN process model) with the concrete effect (clears deletedAt). An agent can tell this apart from delete_process and get_process. Slightly short of 5 because it doesn't explicitly name the deletion/read siblings it supersedes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Soft-deleted' and 'clears deletedAt' imply the tool applies to processes that were deleted, giving implicit usage context. There is no explicit when-not-to-use or alternative routing, so it sits at minimum-viable guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.restore_releaseRestore releaseA
Idempotent
Inspect

Restore a soft-deleted release (clears deletedAt). Idempotent on an already-active row.

NameRequiredDescriptionDefault
releaseIdYesUUID of the release.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=false, readOnlyHint=false and idempotentHint=true, so the idempotency sentence largely repeats structured data. The description does add real value by disclosing the underlying effect ('clears deletedAt'), but says nothing about permissions or 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, with the state-changing effect front-loaded ahead of the idempotency note. Nothing could be removed without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter state-change tool with full annotation coverage, the description covers purpose, precondition and repeat-call behavior. The only gap is what the tool returns, which is not covered by an output schema either.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter with 100% schema description coverage ('UUID of the release'), so the schema already carries the semantics. The description adds no format or sourcing guidance beyond that, making the baseline 3 correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Restore a soft-deleted release') and adds the mechanism '(clears deletedAt)', which clearly separates it from update_release or get_release. It doesn't explicitly name a sibling, so it stops 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Soft-deleted release' gives the explicit precondition for calling it, and 'Idempotent on an already-active row' tells the agent it is safe to call without checking state first. No alternatives (e.g., update_release) are named, so no exclusion guidance exists.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.restore_sprintRestore sprintA
Idempotent
Inspect

Restore a soft-deleted sprint (clears deletedAt). Stories the delete un-assigned are re-assigned if they are still unassigned (a story moved to another sprint meanwhile stays there); the count is returned as relinkedStoryCount. Idempotent on an already-active row.

NameRequiredDescriptionDefault
sprintIdYesUUID of the sprint.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes beyond the annotations by disclosing the real side effect: stories un-assigned during the delete get relinked only if still unassigned, and moved stories are left alone. That conditional relink semantics is exactly the kind of thing annotations cannot convey. It repeats the idempotent hint rather than adding to it, keeping it just short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight clauses: what it does, what happens to related stories, and the idempotency note. The verb and the cleared field are front-loaded, and no sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There's no output schema, so the description correctly names the returned value (relinkedStoryCount). For a single-parameter, non-destructive mutation, the caller has everything needed: precondition, side effects, and return data.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter and schema coverage is 100%, with the schema documenting sprintId as a UUID. The description refers to 'a sprint' but adds no format or validation detail beyond the schema, so this is the baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Restore a soft-deleted sprint') plus the mechanism (clears deletedAt), which cleanly separates it from delete_sprint, update_sprint, and the other restore_* siblings. An agent knows exactly what this does 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The precondition is explicit: the sprint must have been soft-deleted, and calling it on an already-active row is a no-op. It doesn't name an alternative tool or state a when-not case, but the 'soft-deleted' qualifier is a clear selection signal.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.restore_storyRestore storyA
Idempotent
Inspect

Restore a soft-deleted story within the 7-day grace window. Idempotent on an already-active row.

NameRequiredDescriptionDefault
storyIdYesStory ticket key like "ORB-526" or a Stride UUID.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true, destructiveHint=false and readOnlyHint=false, and 'Idempotent on an already-active row' largely restates the idempotency hint while adding the useful nuance that a no-op rather than an error occurs. The 7-day grace window is real behavioral information beyond annotations, but the description omits what happens after expiry, any permission requirements, and whether the restored row's links/history survive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, with the core action and its hard constraint front-loaded. Nothing is restated or padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, non-destructive mutation with annotations and no output schema, the description covers what the tool acts on and its key limit. It could be fuller by stating the expected return (presumably the restored story) and the failure mode outside the grace window, but no critical invocation detail is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter storyId has 100% schema description coverage, including the accepted formats ('ORB-526' or UUID), so the schema does the heavy lifting. The description adds nothing about the identifier beyond what is already documented; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Restore a soft-deleted story') with a scope qualifier that separates it from delete_story and from create_story. It does not explicitly name a sibling alternative, so it falls short of the top band, but the operation is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'within the 7-day grace window' gives a clear precondition for when this tool applies, and 'soft-deleted' excludes active rows. It stops short of 5 because it never says what to do once the window lapses or names the alternative path (e.g., recreate via create_story).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.restore_test_caseRestore test caseA
Idempotent
Inspect

Restore a soft-deleted test case. Idempotent on an already-active row.

NameRequiredDescriptionDefault
testCaseIdYesUUID of the test case.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=false, so the description's second sentence largely restates structured data. The one genuinely additive detail is that restoration applies to 'soft-deleted' rows, implying a hard-delete boundary. No information on error behavior for unknown IDs or on what 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, with the primary action stated first and the idempotency caveat second. Nothing could be trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, non-destructive state-flip with no output schema, the description covers the essentials. Minor gaps remain around the failure mode for a nonexistent or already-active ID and whether the restored record is returned.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter is fully documented as the test case UUID. The description adds no format, sourcing, or lookup guidance 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Restore a soft-deleted test case') that is unambiguously the inverse of stride.delete_test_case and distinct from update_test_case. The 'soft-deleted' qualifier narrows scope well, though it does not explicitly name the counterpart sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'soft-deleted' implies the precondition (the record must be in a deleted state), which is useful implied guidance. However, there is no explicit when-to-use statement, no mention that hard-deleted cases cannot be restored, and no pointer to get_test_case or list_test_cases for verifying state first.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.run_process_insightsRun process insightsA
Idempotent
Inspect

Re-run the rule-based insight generators for ONE process (Optimize) against its latest event stream — no AI spend. Additive: writes new ProcessInsight rows, never edits or deletes. Returns { generated, deduped }; read the insights with stride.list_process_insights. Use after changing a process instead of regenerating the whole project.

NameRequiredDescriptionDefault
processIdYesProcess UUID (from stride.list_processes).

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite readOnlyHint=false, the description clarifies the write is strictly additive ("writes new ProcessInsight rows, never edits or deletes"), consistent with destructiveHint=false and idempotentHint=true. It also discloses the economics ("no AI spend") and the return shape { generated, deduped }, which no annotation or output schema provides.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly packed sentences with no filler; the operation and its single-process scope lead, followed by safety, return shape, and the routing alternative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers everything needed for a one-parameter mutation: what runs, what is written vs. left untouched, cost implication, return value, and how to read the results. Absence of an output schema is compensated by the inline return shape.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter and schema coverage is 100%, with the schema already documenting processId as a UUID from stride.list_processes. The description reinforces single-process scoping ("ONE process") but adds no format or sourcing 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: re-runs rule-based insight generators for a single process against its latest event stream, scoped to Optimize. An agent can distinguish it from stride.list_process_insights (read) and stride.generate_process (project-wide generation) without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use it ("after changing a process") and what it replaces ("instead of regenerating the whole project"), and names the sibling to use for reading results. Both the when and the alternative are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.run_quality_gate_checkRun quality gate checkAInspect

Evaluate a quality gate against current project state (test pass-rate, open critical defects, story test-coverage), persist a PASS/FAIL evaluation event, and flip the gate status to the verdict. Returns the verdict plus per-criterion results and metrics, and a reason token: CRITERIA_MET / CRITERIA_BREACHED when the gate measured something, or NO_CRITERIA / NO_ENABLED_CRITERIA when it did not, or NO_RESULTS when no test has run in its scope — those three FAIL closed and are NOT a breach, so fix the gate (or run the tests) rather than the project.

NameRequiredDescriptionDefault
qualityGateIdYesUUID of the quality gate to evaluate.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite annotations, the description adds meaningful unstated context: it persists a PASS/FAIL evaluation event and flips the gate status to the verdict, which is the main side effect an agent needs to know before calling a non-readOnly, non-idempotent tool. It also discloses the return shape (verdict, per-criterion results, metrics, reason token) and enumerates the reason token values with their failure semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and its effects, then the return contract and the reason-token taxonomy. It is dense — one long sentence with stacked parentheticals and a compound reason-token clause — but nearly every clause carries actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates by describing the verdict, per-criterion results, metrics, and the reason token values with their interpretation. For a single-parameter mutation with side effects, nothing an agent needs to call it correctly and interpret the result is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter (qualityGateId) and schema coverage is 100%, so the schema fully documents it. The description does not add format, validation, or sourcing guidance beyond 'UUID of the quality gate'; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Evaluate a quality gate against current project state') and enumerates exactly what criteria are measured (test pass-rate, open critical defects, story test-coverage). This is clearly distinguishable from siblings like get_quality_gate, create_quality_gate, and update_quality_gate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The trailing clause gives real decision guidance: NO_CRITERIA / NO_ENABLED_CRITERIA / NO_RESULTS are described as failing closed and 'NOT a breach', directing the agent to fix the gate or run tests instead of the project. However, it never explicitly contrasts with the sibling read tool (get_quality_gate) or says when running this is preferable to simply inspecting the gate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.search_documentsSearch documentsA
Read-onlyIdempotent
Inspect

Search this project's Library — meeting notes, PRDs, specs, retros, release notes and other documents — by keyword/phrase (full-text over title + body), with optional templateType (e.g. 'meeting-notes', 'prd') and recency (updatedWithinDays) filters. Returns compact rows with a snippet; stride.get_document reads a full body. The notes and context a team has written down are found here.

NameRequiredDescriptionDefault
limitNo
queryNoFree-text search over document title + body. Omit to list recent documents.
projectIdYesProject UUID (the current project).
templateTypeNoFilter by document type, e.g. 'meeting-notes', 'prd', 'sprint-retro', 'release-notes'.
updatedWithinDaysNoOnly documents updated within the last N days (e.g. 1 for today, 7 for this week).

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, and closed-world behavior. The description adds useful behavioral context beyond annotations by stating that search returns compact rows with snippets and that full bodies require stride.get_document.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose, filters, return shape, and the full-body alternative. The final sentence is slightly redundant, but overall it remains efficient and easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, but the description explains that results are compact rows with snippets, which is enough for an agent to understand the return shape. Combined with annotations and 80% schema coverage, it is nearly complete, though pagination and default limit behavior are left to the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 80%, so most parameters are already documented in the schema. The description reinforces the important filters and full-text scope over title and body, but it does not add significant syntax or behavior beyond the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: search a project's Library documents by keyword/phrase with optional template and recency filters. It clearly distinguishes this from reading a full document by naming stride.get_document and its role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly establishes when to use this tool: finding written team context across document types, and it names stride.get_document as the alternative for full document bodies. It does not explicitly compare against non-document siblings such as search_stories, but the document-specific scope is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.search_storiesSearch storiesA
Read-onlyIdempotent
Inspect

Search a project's stories. If the query is a ticket key like "ORB-526" (or a UUID) it resolves that exact story; otherwise it free-text searches title + description, relevance-ranked (title first). Optional status filter — a category (TODO/IN_PROGRESS/IN_REVIEW/DONE) OR a board-column name from stride.list_workflow_stages — or stageId for an exact column. Each result includes its displayId (ticket key) — refer to stories by that. Use this for "tell me about ORB-526" or "find the story about X". For filtered listing use stride.list_stories.

NameRequiredDescriptionDefault
limitNo
queryYesText to search for.
statusNoA category (TODO/IN_PROGRESS/IN_REVIEW/DONE) OR the exact name of a column from stride.list_workflow_stages.
stageIdNoBoard-column (workflow stage) UUID — exact column filter.
projectIdYesProject UUID.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so safety is covered; the description adds genuine behavior beyond that — resolution logic for ticket keys, relevance ranking with title weighted first, and the fact that results carry a displayId that should be used to reference stories. It stops short of describing pagination or what happens on a zero-hit or ambiguous query.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Core behavior is front-loaded in the first sentence, then modes, then filter semantics, then the routing pointer to the sibling. Dense but every sentence earns its place; the only mild redundancy is restating status enum values already in the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully discloses the key returned field (displayId) and result ordering, and it fully covers the required projectId/query contract. Minor gaps remain around limit defaults/pagination behavior and truncated-result handling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 80%, so the baseline is 3, but the description meaningfully expands on `query` (ticket key/UUID vs free-text) and clarifies the status-vs-stageId split for column filtering. Some of the status wording duplicates the schema description, which keeps it from a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (search) and resource (a project's stories), and unpacks the two internal modes — exact ticket-key/UUID resolution vs relevance-ranked free-text over title+description. A reader can distinguish it from stride.list_stories without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete triggering utterances ("tell me about ORB-526", "find the story about X") and names the alternative with the condition that selects it: "For filtered listing use stride.list_stories." It also points to stride.list_workflow_stages as the source of valid column names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.start_story_workStart story work (draft PR)A
Idempotent
Inspect

Scaffold a GitHub DRAFT pull request from a story: opens a branch named with the ticket key, commits the full spec to .stride/.md, and opens a draft PR with a compact brief. The PR auto-links back to the story. Use after implementing a story to create the review surface. Identify the story by ticket key ("ORB-526") or UUID. Optionally pass repo ("owner/name" or "name") and baseBranch. Idempotent — returns the existing open draft PR if one is already linked. Requires GitHub to be connected for the workspace.

NameRequiredDescriptionDefault
repoNoTarget repo as "owner/name" or "name". Omit to use the default / sole accessible repo.
storyIdYesStory ticket key like "ORB-526" (preferred) or a Stride UUID.
baseBranchNoBase branch. Omit to use the repo default branch.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: it enumerates the side effects (branch, commit to .stride/<KEY>.md, draft PR, auto-link back to story), explains concretely what idempotentHint means (returns the existing open draft PR if one is linked), and discloses the auth prerequisite. With readOnly=false and openWorld=true already declared, this is exactly the extra context an agent needs before a write to an external system.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the outcome and the artifact chain, then usage and constraints. The repo/baseBranch/identifier sentences largely duplicate the schema descriptions, which is minor waste in an otherwise tight definition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description partly compensates by saying it returns the existing open draft PR on re-invocation. It stops short of saying what the successful result contains (PR URL/number, branch name), which would fully close the gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and every parameter already has a description, so the description only restates the storyId formats, repo form, and baseBranch default. It confirms rather than adds meaning; baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb and artifact chain: opens a branch named with the ticket key, commits the spec to .stride/<KEY>.md, and opens a draft PR. No sibling tool in the list creates PRs, and the description's focus on 'DRAFT pull request from a story' makes the resource unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Use after implementing a story to create the review surface" gives a clear trigger, and the GitHub-connection prerequisite is stated explicitly. It doesn't name a when-not condition or an alternative path, but no sibling tool offers a comparable capability.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.toggle_reactionToggle reactionAInspect

Add, remove, or toggle an emoji reaction (👍 👎 ❤️ 😄 🎉 🚀 👀) on a comment. Defaults to toggle — flips the agent's own reaction state. Attributed to the agent's bot user.

NameRequiredDescriptionDefault
emojiYes
actionNotoggle
commentIdYesUUID of the comment.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds genuinely useful context beyond the annotations: attribution to the agent's own bot user, and that toggle flips the agent's own reaction state — which explains why idempotentHint=false is consistent. It does not disclose what the response looks like or any error/permission behavior, but with annotations present the bar is lower.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the verb and resource, then the default behavior. The emoji list duplicates the enum slightly but is compact and readable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter mutation with no output schema, the definition covers purpose, modes, default, and attribution adequately. It leaves return value and failure conditions unaddressed, which is acceptable given there is no output schema but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33% (only commentId is documented), so the description must compensate — and it does by defining the three action modes and that 'toggle' is the default, plus enumerating the emoji values. The one remaining gap is that it does not restate what commentId must identify, which the schema already covers.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names specific verbs (add, remove, toggle) against a specific resource (an emoji reaction on a comment), and the emoji set is spelled out. This is clearly distinct from create_comment, update_comment, and the other comment-related siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the default mode and what 'toggle' means, which guides mode selection, but it never states when to reach for this tool versus update_comment or delete_comment, nor any prerequisites (e.g., comment must exist / be visible).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.transition_sprintTransition sprintA
DestructiveIdempotent
Inspect

Transition a sprint to a new status: ACTIVE (start a PLANNING sprint), COMPLETED (close an ACTIVE sprint; incomplete stories return to backlog), or CANCELLED. Only ONE sprint per project can be ACTIVE: starting a second returns SPRINT_ALREADY_ACTIVE naming the active one — complete or cancel it first (stride.list_sprints shows statuses). A sprint already in the requested state returns SPRINT_ALREADY_IN_STATE (with requestedState) and changes nothing — distinct from SPRINT_ALREADY_ACTIVE, which means a DIFFERENT sprint holds the slot. Illegal transitions return isError with the legal next states. Conflict-guarded against concurrent human edits (pass force:true, after re-reading with get_sprint, to override — the override is audit-logged).

NameRequiredDescriptionDefault
toYesTarget status.
forceNoRequired after a HUMAN_EDIT_AFTER_AGENT_SYNC conflict — re-reading with get_sprint does not clear it. Re-read first and account for the human's edit; overwrite it only with the human's explicit approval — the override is audit-logged.
sprintIdYes

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, it discloses the SPRINT_ALREADY_ACTIVE vs SPRINT_ALREADY_IN_STATE distinction, the incomplete-story backlog effect, illegal-transition isError responses, conflict guarding against human edits, and audit logging. This is rich operational context for a 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single dense paragraph front-loaded with transition states and effects, followed by error semantics and conflict handling. No sentence is filler; each adds operational value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still covers response semantics (error codes, isError), side effects (stories to backlog), and conflict recovery. That is complete for a three-parameter destructive tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema documents the enum for 'to' and the force parameter, and the description adds lifecycle meaning per status (ACTIVE starts PLANNING, COMPLETED returns incomplete stories) and clarifies force is required only after HUMAN_EDIT_AFTER_AGENT_SYNC and must be preceded by get_sprint. The only undocumented parameter, sprintId, is self-evident.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Transition') and resource ('sprint'), then enumerates exactly the three target statuses and their lifecycle meanings. Its scope is clearly limited to status changes, which distinguishes it from general update operations even though update_sprint is not named.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains when each transition applies (start PLANNING, close ACTIVE, cancel), what happens to incomplete stories, and points to stride.list_sprints for status checks and get_sprint for conflict re-reads. Error conditions and the force override path are also explicitly described.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.trigger_legacy_reanalysisReanalyze legacy systemAInspect

Re-ingest a legacy system's connected repository (Modernize). Refuses when the repo is not stale unless force:true (spends AI credits). Incremental by default; pass full:true to re-analyze every chunk.

NameRequiredDescriptionDefault
fullNoFull re-ingest instead of incremental dirty-chunks only.
forceNoRe-analyze even when the repo is up to date.
legacySystemIdYesUUID of the legacy system.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds real context beyond the annotations: the staleness gate, that force spends AI credits, and the incremental vs full trade-off. It does not say whether the call blocks or returns a job handle, which matters for a non-idempotent, open-world operation that likely runs asynchronously.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with what it does, then the refusal gate, then the mode default. No filler; each sentence carries a distinct constraint.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a non-idempotent, billable, open-world mutation with no output schema, the definition never says what comes back (job id, status handle, or synchronous result) or how progress is observed via get_tool_call_status. Everything else an agent needs to invoke it is present, so this is adequate but with a clear gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description earns an extra point by explaining the cost consequence of force ('spends AI credits') and contrasting full vs dirty-chunk re-analysis rather than merely restating the flags.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: re-ingest a legacy system's connected repository for Modernize. The 'Refuses when the repo is not stale' clause implicitly points at the status-check sibling, but no sibling is named, so the differentiation is soft rather than explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear when-not condition ('refuses when the repo is not stale unless force:true') and a mode decision rule (incremental by default, full:true for everything). It stops short of naming the alternative step (e.g. check get_modernization_repo_status first) or stating prerequisites like permissions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.update_commentUpdate commentA
DestructiveIdempotent
Inspect

Edit the body of an agent-authored comment. Only the integration's bot user can edit its own comments — human-authored comments are off-limits. Re-runs mentions dispatch with previousContent so notifications only fire for newly mentioned users.

NameRequiredDescriptionDefault
contentYes
commentIdYesUUID of the comment.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by disclosing the authorization model (only the bot's own comments are editable) and the mention re-dispatch behavior, which explains that notifications fire only for newly mentioned users — a non-obvious side effect an agent could not infer from destructiveHint/idempotentHint alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with zero filler; the permission boundary comes immediately after the core action and the notification nuance is last. Nothing is redundant with the title or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutation with no output schema, the description covers eligibility and mention side effects well. It stops short of stating what happens on a rejected edit (error vs silent no-op) or what the call returns, which is a minor residual gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: commentId is documented in the schema, while content is only constrained by length bounds. The description maps 'body' to content but adds no format, length, or replacement-vs-merge semantics beyond what the schema already conveys, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (edit) and resource (body of a comment) along with a scope constraint (agent-authored only) that immediately separates it from create_comment and delete_comment. An agent can identify the target 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes clear when this tool applies (the integration's own bot comments) and when it does not (human-authored comments are off-limits). It doesn't explicitly name a sibling alternative, but the exclusion rule is stated plainly enough for correct selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.update_defectUpdate defectA
DestructiveIdempotent
Inspect

Patch fields on an existing defect: title, description, severity, status, storyId (ticket key like "ORB-526" or UUID), testCaseId, assigneeId. Cross-project references are validated to live in the defect's project. Pass null to clear a nullable field. Only fields whose value actually differs are written and reported (fieldsChanged / unchanged); a call that changes nothing says "already X — no change" and writes nothing. Refuses tombstoned (soft-deleted) defects. Conflict-guarded against concurrent human edits (pass force:true, after re-reading with get_defect, to override — the override is audit-logged).

NameRequiredDescriptionDefault
forceNoRequired after a HUMAN_EDIT_AFTER_AGENT_SYNC conflict — re-reading with get_defect does not clear it. Re-read first and carry the human's edit forward in your payload; overwrite it only with the human's explicit approval — the override is audit-logged.
titleNo
statusNo
storyIdNoStory ticket key like "ORB-526" or UUID (same project); null unlinks.
defectIdYes
severityNo
assigneeIdNo
testCaseIdNo
descriptionNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotation trio (destructive/idempotent/non-readonly) by disclosing that no-op writes are skipped and reported via fieldsChanged/unchanged, that tombstoned records are refused, that cross-project references are validated, and that the force override is audit-logged. These are exactly the mutation-behavior details 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Field inventory is front-loaded, followed by behavioral rules in descending order of importance (no-op detection, tombstone refusal, conflict handling). Six dense sentences with no filler, despite the run-on paragraph form.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, 9-parameter mutation with no output schema, the description supplies conflict, idempotency, and no-op semantics plus the fieldsChanged reporting shape. It omits permission/scoping requirements and any mention of what the full response contains beyond the change report.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 22%, but the description compensates: it names the patchable fields, explains storyId's ticket-key/UUID format and project constraint, and states the global null-clears semantics for nullable params. It leaves severity/status enum meanings and the semantics of an omitted (vs null) field to the schema and inference.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource ("Patch fields on an existing defect") and enumerates the exact patchable fields, which immediately separates it from create_defect, delete_defect, and the story-update siblings. An agent can identify the target resource and scope 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete when-to guidance: pass null to clear a nullable field, use force:true only after re-reading with get_defect, and expect refusal on tombstoned defects. It does not explicitly route to alternatives (e.g. restore_defect for soft-deleted records, or update_story for non-defect entities), leaving that 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.

stride.update_documentUpdate documentA
DestructiveIdempotent
Inspect

Update a Library document — replace its title and/or its body (markdown). Required: documentId. Provide title and/or markdown. Markdown REPLACES the whole body; use stride.append_to_document to add to the end instead. Returns the document id + URL.

NameRequiredDescriptionDefault
titleNo
markdownNoNew body (markdown) — replaces the current content.
documentIdYesThe document UUID.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and idempotentHint=true; the description adds meaningful context by spelling out that markdown overwrites the entire body and by stating the return value (document id + URL). It does not say what happens if neither title nor markdown is passed, nor whether omitted fields are preserved, which would be the last piece of behavioral clarity for a destructive update.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short clauses, front-loaded with the action and its target, followed by the required parameter and the destructive-replacement warning. No filler sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter mutation tool with no output schema, the description covers the action, the required input, the destructive replace semantics, the sibling alternative, and the return shape. An agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%, with title and documentId undocumented in the schema; the description compensates by marking documentId as required and framing title/markdown as an either-or pair. It adds the crucial replace-vs-append semantics for markdown beyond what the schema says. It stops short of mentioning the length limits the schema enforces.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Update a Library document') plus the exact fields it can replace (title and/or markdown body). It also explicitly positions itself against the sibling stride.append_to_document, so an agent can tell the two apart without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the alternative tool and the condition that selects it: 'Markdown REPLACES the whole body; use stride.append_to_document to add to the end instead.' It also states the required parameter and that at least one of title/markdown should be supplied, 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.

stride.update_epicUpdate epicA
DestructiveIdempotent
Inspect

Update an epic: title / content / status / priority / startDate / targetDate. Status transitions follow DRAFT → PUBLISHED → ARCHIVED; illegal transitions return ILLEGAL_TRANSITION. Priority is stored in artifact metadata, merged with existing keys. Dates are day-grain (YYYY-MM-DD or ISO; null clears); start must stay ≤ target or the call returns DATE_ORDER.

NameRequiredDescriptionDefault
titleNo
epicIdYesUUID of the epic.
statusNo
contentNo
priorityNo
startDateNoRoadmap start date (YYYY-MM-DD or ISO; null clears).
targetDateNoRoadmap target date (YYYY-MM-DD or ISO; null clears).

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true, readOnlyHint=false, so the safety profile is covered; the description then adds real value beyond that: the exact legal status pipeline, error codes ILLEGAL_TRANSITION and DATE_ORDER, day-grain date handling with null-clears semantics, and that priority merges into artifact metadata rather than replacing it. It stops short of saying whether omitted fields are left unchanged or naming required permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four dense sentences that are front-loaded with the field list and then layer constraint after constraint; no filler, no restatement of the title, and every clause carries either a format rule or an error contract.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter mutation tool with no output schema, the description covers the mutation surface, the validation contract, and the metadata-merge quirk. The remaining gap is the shape of the success response and confirmation of partial-update semantics for unspecified fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 43%, so the description has to carry weight and largely does: it names all six optional fields, explains status enum progression, spells out the date format (YYYY-MM-DD or ISO), the null-clears behavior, and the start ≤ target constraint. It adds little on title/content length limits (left to schema) and never mentions epicId explicitly, so not a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb ('Update') plus resource ('an epic') plus an explicit enumeration of the six updatable fields. It is clearly distinguishable from create_epic/delete_epic by the resource, but it never differentiates itself from update_story or bulk_update_stories, so the sibling-routing job is left to the name alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The status-transition rule (DRAFT → PUBLISHED → ARCHIVED) and the date validation imply when the call will fail, which is useful context for choosing it. However, there is no explicit statement of when to use this versus update_story, bulk_update_stories, or transition_sprint, and no prerequisites/permission guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.update_labelUpdate labelA
DestructiveIdempotent
Inspect

Rename a label or change its color. Note: renaming the Label row does NOT cascade to story label associations (those are stored as a string array on the story). Use bulk_update_stories with labels.mode=replace if you need to migrate the actual story-side references.

NameRequiredDescriptionDefault
nameNo
colorNoHex color like #6B7280.
labelIdYesUUID of the label.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, so safety is partly covered. The description still adds the single most valuable non-obvious fact — that renaming does not cascade to story label associations — which an agent could not infer from schema or annotations. It is silent on permissions, failure modes for an unknown labelId, and whether omitted fields are left untouched.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with zero filler: the capability first, then the caveat and its escape hatch. Every clause earns its place, and the critical warning is not buried at the end of a long preamble.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter label mutation with no output schema, the definition covers purpose, the surprising semantic gap, and the migration path. It lacks only partial-update semantics and error behavior for an invalid labelId, which are minor given the schema clearly marks only labelId as required.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67% and the two optional fields (name, color) are directly implied by the description's 'rename... or change its color' phrasing. However, it does not state that the update is partial (omitted fields unchanged) or that at least one of name/color should be supplied, and the undescribed `name` parameter gets no compensating detail. Baseline 3 fits.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource pair — 'Rename a label or change its color' — which maps exactly to the two optional parameters. It is trivially distinguishable from create_label, delete_label, and list_labels, and it names the sibling that handles the adjacent concern (bulk_update_stories).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly defines the boundary of the tool: it changes the Label row only, and cross-references bulk_update_stories with labels.mode=replace as the route for migrating story-side references. That is a concrete when/when-not plus a named alternative with the exact parameter to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.update_project_member_roleChange project member roleA
DestructiveIdempotent
Inspect

Change an existing project member's role (OWNER, EDITOR, or VIEWER). Fails if the person has not been added to the project — use stride.add_project_member for that.

NameRequiredDescriptionDefault
roleYesNew role.
memberYesWorkspace member — user UUID or email address.
projectIdYesProject UUID.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true and openWorldHint=false, so the safety profile is covered. The description adds a real behavioral fact beyond them: the membership precondition that causes failure. It stops short of documenting who is authorized to change roles or whether demoting the last OWNER is blocked.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero waste, with the operation and its role values front-loaded and the guardrail/alternative in the second sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter mutation with full schema coverage and annotations carrying the destructive/idempotent profile, the description covers what an agent needs to call it correctly. Authorization requirements are the only notable omission, and there is no output schema to explain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% — projectId, member (UUID or email) and the role enum are all documented in the schema. The description only restates the enum values already present there, adding no new semantics; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Change an existing project member's role') and enumerates the valid role values inline. It is immediately distinguishable from sibling membership tools such as add_project_member and remove_project_member.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the failure precondition ('Fails if the person has not been added to the project') and routes the agent to the correct alternative, stride.add_project_member, for that case. This is exactly the when/when-not/alternative structure the dimension rewards.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.update_quality_gateUpdate quality gateA
DestructiveIdempotent
Inspect

Patch a quality gate: name, criteria (set-replace JSON), and/or status (PENDING | PASSED | FAILED | BLOCKED). To recompute the verdict from live project metrics instead of setting status manually, use stride.run_quality_gate_check.

NameRequiredDescriptionDefault
nameNo
statusNo
criteriaNoCriteria the /check evaluator scores. Preferred: an array of { type, threshold, enabled? }. Types and units: pass_rate (percent 0-100 of executed results that passed, >= threshold), parity_pass_rate (percent 0-100 of behavioural-parity links passing, >= threshold; fails closed when unmeasured), max_critical_defects (count of open CRITICAL defects, <= threshold), min_test_coverage (percent 0-100 of in-scope stories/cases with a live test, >= threshold). An unknown type never passes, and so does a criterion without a threshold. A bare object is stored verbatim for legacy callers.
qualityGateIdYesUUID of the quality gate.

TDQS

A4.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, so the mutation risk profile is carried by structured data. The description adds one genuinely useful behavioral fact — that criteria is 'set-replace' rather than merged — but doesn't clarify that omitted fields are left unchanged (vs. cleared) or what the response looks like.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the action and mutable fields, followed by the single most important disambiguation. No filler and nothing buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-param mutation tool with no output schema, the description plus rich schema covers the essential decisions. The remaining gap is patch semantics — whether omitted fields are preserved and whether clearing a field is possible — which matters given destructiveHint=true.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema's criteria description is already extremely rich (types, units, failure semantics), but it does not state that the array replaces existing criteria; the description supplies that replace-vs-merge meaning. Status enum values are repeated from the schema, and name/qualityGateId get no added semantics, so it's good rather than exhaustive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Patch') and resource ('a quality gate') plus the exact mutable fields (name, criteria, status). An agent can immediately separate it from create_quality_gate, delete_quality_gate, and run_quality_gate_check.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the alternative (stride.run_quality_gate_check) and the condition that selects it: recomputing the verdict from live metrics instead of setting status manually. That is the key routing decision for this tool family and it is stated directly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.update_releaseUpdate releaseA
DestructiveIdempotent
Inspect

Patch fields on an existing release: name, version, status, targetDate (nullable), description (nullable), storyIds (set-replace; ticket keys like "ORB-526" or UUIDs, must belong to the same project). Pass null to clear targetDate or description.

NameRequiredDescriptionDefault
nameNo
statusNo
versionNo
storyIdsNoSet-replace: ticket keys like 'ORB-526' or UUIDs in the release's project.
releaseIdYesUUID of the release.
targetDateNoDate (YYYY-MM-DD) or full ISO datetime; stored as midnight UTC. Null clears it.
descriptionNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavior beyond the annotations: nullable targetDate/description can be cleared with null, and storyIds is a set-replace operation requiring ticket keys or UUIDs from the same project. Annotations already cover destructive and idempotent hints, so the remaining gap around permission requirements or status-transition side effects is acceptable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences front-load the core operation and then provide the most important parameter semantics. Every clause earns its place, with no redundant preamble.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, idempotent mutation with seven parameters and no output schema, the description covers the key update semantics an agent needs to invoke it correctly. It leaves minor gaps around partial-update behavior for omitted fields and whether status changes have transition constraints.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only 43% schema description coverage, the description compensates well by listing the modifiable fields and explaining null-clearing for targetDate and description plus set-replace semantics for storyIds. It does not add detail for status enum values or length limits, and some storyIds/targetDate semantics duplicate schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Patch fields on an existing release', followed by the exact fields that can be updated. It is clearly distinct from create_release and delete_release in practice, but it does not explicitly name or 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'Patch fields on an existing release', so an agent can infer this is for partial updates. However, there is no explicit guidance on when to use this versus create_release, delete_release, restore_release, or update_sprint/update_story alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.update_sprintUpdate sprintA
DestructiveIdempotent
Inspect

Patch sprint metadata: name, startDate, endDate, goal. Use null to clear a nullable field (startDate, endDate, goal). Status transitions live in stride.transition_sprint. Closed (COMPLETED/CANCELLED) sprints reject metadata edits. Conflict-guarded against concurrent human edits (pass force:true, only with the human's explicit approval, to overwrite a human edit).

NameRequiredDescriptionDefault
goalNo
nameNo
forceNoRequired after a HUMAN_EDIT_AFTER_AGENT_SYNC conflict — re-reading with get_sprint does not clear it. Re-read first and carry the human's edit forward in your payload; overwrite it only with the human's explicit approval — the override is audit-logged.
endDateNoDate (YYYY-MM-DD) or full ISO datetime; stored as midnight UTC. Null clears it.
sprintIdYes
startDateNoDate (YYYY-MM-DD) or full ISO datetime; stored as midnight UTC. Null clears it.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this as destructive and idempotent, but the description adds important behavior beyond them: closed sprints reject metadata edits, concurrent human edits are conflict-guarded, and force should only be used with explicit human approval. That is exactly the kind of operational context an agent needs for a 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four front-loaded sentences with no wasted text. Field scope, null handling, sibling routing, closed-state behavior, and conflict handling each appear in a compact sequence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, conflict-prone sprint mutation with no output schema, the description covers the main hazards: null clearing, closed-sprint rejection, and human-edit conflict behavior. It leaves minor gaps around sprintId meaning and exact partial-update semantics, but those are less critical because the schema enforces required parameters and patch behavior is implied.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 50%, so the description needs to compensate. It adds useful semantics by listing mutable fields and explaining that null clears nullable fields, but it does not explain sprintId or name semantics beyond field inclusion, and its force explanation adds little beyond the detailed schema description for force.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource: 'Patch sprint metadata' for name, startDate, endDate, and goal. It also explicitly routes status changes to stride.transition_sprint, making the boundary with that sibling unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It names the alternative tool for status transitions and the condition for using it. It also states when edits are rejected (closed sprints) and gives an explicit approval gate for force, so the agent has clear use and avoid conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.update_storyUpdate storyA
DestructiveIdempotent
Inspect

Patch fields on an existing story: title, description, type, priority, storyPoints, labels (set-replace), acceptanceCriteria (set-replace), assigneeId, sprintId, epicId, dueDate. Use stride.update_story_status for status transitions (it carries the optional comment). Identify the story by ticket key (e.g. "ORB-526") or UUID. Conflict-guarded — rejected if a human edited after your last read; pass force:true only with the human's explicit approval to overwrite their edit.

NameRequiredDescriptionDefault
typeNo
forceNoOverride a HUMAN_EDIT_AFTER_AGENT_SYNC conflict, overwriting the human's newer edit. Set true ONLY when the human has explicitly approved overwriting their change — the override is audit-logged.
titleNo
epicIdNo
labelsNo
dueDateNoDate (YYYY-MM-DD) or full ISO datetime; stored as midnight UTC. Null clears it.
storyIdYesStory ticket key like "ORB-526" (preferred) or a Stride UUID.
priorityNo
sprintIdNo
assigneeIdNo
descriptionNo
storyPointsNo
acceptanceCriteriaNo

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds real substance the annotations cannot: the HUMAN_EDIT_AFTER_AGENT_SYNC conflict guard, that force is audit-logged, and that it overwrites the human's newer edit. It stops short of describing the failure response shape or what a rejected patch returns, but the mutation-risk profile is well disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each serving a distinct purpose: what fields, which sibling handles status, and the conflict/force rule. The most decision-critical constraint (conflict guard) is placed last but the routing guidance is front-loaded, and no sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 13-parameter destructive mutation with no output schema, the description covers field scope, identifier form, sibling routing, and conflict/override behavior. The remaining gap is return-value and partial-failure behavior, plus semantics of nulling fields beyond dueDate, but the critical call-time decisions are all supported.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 23%, so the description must compensate, and it does for the fields that matter most: it flags labels and acceptanceCriteria as set-replace semantics, which is nowhere in the schema, and states the ticket-key-or-UUID identifier convention. Type/priority enums are left to the schema and per-field formats (dates, points bounds) are uncovered, keeping it below 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ('Patch fields on an existing story') and enumerates the exact patchable fields, then explicitly names the sibling it is not (stride.update_story_status). An agent can distinguish it from create_story, bulk_update_stories, and assign_story without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes status transitions to stride.update_story_status and notes that tool carries the optional comment. It also states the precondition for force:true (human's explicit approval) and the default rejection behavior, so both the normal and override paths are covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.update_story_statusUpdate story statusA
Idempotent
Inspect

Transition a story's status with an optional comment. status accepts a category (TODO / IN_PROGRESS / IN_REVIEW / DONE — always valid) OR the exact name of a board column from stride.list_workflow_stages (a project may have custom columns like "Code Review" or "QA"). Identify the story by ticket key (e.g. "ORB-526") or UUID. An unrecognised status returns an error listing the project's columns. Rejected with a conflict error if a human edited the story after your last read; call stride.get_story first, or pass force:true (only with the human's explicit approval) to overwrite their edit.

NameRequiredDescriptionDefault
forceNoOverride a HUMAN_EDIT_AFTER_AGENT_SYNC conflict, overwriting the human's newer edit. Set true ONLY when the human has explicitly approved overwriting their change — the override is audit-logged.
statusYesA category (TODO/IN_PROGRESS/IN_REVIEW/DONE — always valid) OR the exact name of a column from stride.list_workflow_stages.
commentNoOptional progress comment attached to the status change.
storyIdYesStory ticket key like "ORB-526" (preferred) or a Stride UUID.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: describes the HUMAN_EDIT_AFTER_AGENT_SYNC conflict, that the override is audit-logged, and that an unrecognised status returns an error enumerating valid columns. Annotations (idempotent, non-destructive) are consistent with a status transition that is safe to retry, and the description adds the concurrency-safety context they omit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the action in the first clause and every following sentence carries operational content (accepted values, identification, error behaviour, conflict path). Slightly dense with em-dashes and parentheticals, but no filler to cut.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with a conflict/override path, no output schema and four fully documented params, the description covers what changes, how to identify the target, what errors mean, and how to recover. Nothing an agent needs in order to call it safely is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description still adds value by explaining that `status` accepts either a universal category or an exact custom column name, with concrete examples ('Code Review', 'QA'), and by giving the ticket-key example format for `storyId`. The gating rule around `force` (explicit human approval, audit-logged) is restated beyond the schema but adds the consequence of misuse.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Transition a story's status') plus the optional comment side-effect, so the agent knows exactly what changes. It references siblings stride.list_workflow_stages and stride.get_story but never explicitly says how it differs from stride.update_story or stride.bulk_update_stories, which is the one ambiguity an agent would still have.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use and when-not: use a category or a column name from stride.list_workflow_stages, call stride.get_story first on a conflict, and only pass force:true with explicit human approval. It also tells the agent what happens on failure (error listing the project's columns), which functions as a recovery path.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.update_test_caseUpdate test caseA
DestructiveIdempotent
Inspect

Patch fields on an existing test case: title, description, steps (set-replace array of { action, expected }), expectedResult, priority, type, status, assigneeId (nullable), storyId (ticket key or UUID, nullable), suiteId (moves the case to another suite in the same project — ids from stride.list_test_suites; the case keeps its id, results and links). Any omitted field is unchanged; pass null to clear assigneeId / storyId. Cross-project ids are rejected.

NameRequiredDescriptionDefault
typeNo
stepsNo
titleNo
statusNo
storyIdNoStory ticket key like "ORB-526" or UUID (same project); null unlinks.
suiteIdNoMove the case to this test suite (UUID, same project; stride.list_test_suites).
priorityNo
assigneeIdNo
testCaseIdYesUUID of the test case.
descriptionNo
expectedResultNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and idempotentHint=true; the description earns credit by explaining what the destructive behavior actually looks like ('steps (set-replace array)', null to clear assigneeId/storyId, cross-project ids rejected) and what survives a suite move ('keeps its id, results and links'). It does not mention permissions, error shapes, or limits, which keeps it below a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with a complete field list in the first clause, then patch/null and validation rules. Dense parentheticals make the single run-on sentence heavier than ideal, but every clause carries actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 11-parameter mutation with no output schema, the description covers field semantics, patch behavior, and the cross-project guard. The remaining gap is what the call returns and whether partial-failure is possible when both steps and suiteId change; minor, but not negligible for a destructive patch.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 27%, and the description compensates fully: it gives the steps item shape ({ action, expected }), the nullable-clear semantics for three fields, the accepted storyId formats (ticket key or UUID), and the suiteId side effect of moving the case. This is meaning well beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Patch fields on an existing test case') and immediately enumerates the mutable fields, so an agent can distinguish it from create_test_case, delete_test_case and update_test_suite without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly establishes patch semantics — 'Any omitted field is unchanged; pass null to clear assigneeId / storyId' — plus a constraint ('Cross-project ids are rejected') and a discovery pointer ('ids from stride.list_test_suites'). It stops short of naming sibling alternatives such as update_test_suite for suite-level changes, so exclusion guidance is implicit rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.update_test_suiteUpdate test suiteA
DestructiveIdempotent
Inspect

Rename a test suite or change its description / category. Pass null to clear description or category; omit a field to leave it unchanged. Refuses a rename that would duplicate another suite name in the same project.

NameRequiredDescriptionDefault
nameNoNew suite name.
categoryNoNew grouping label, or null to clear.
descriptionNoNew description, or null to clear.
testSuiteIdYesUUID of the test suite.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=false, idempotent=true, destructive=true, so the safety profile is covered. The description adds real behavioral context beyond them: the duplicate-name validation rule and the null-vs-omit distinction. It does not explain the destructive flag's implications or auth requirements, keeping it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the capability, then the null/omit rule, then the constraint. 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.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-param mutation tool with no output schema, the description covers capability, patch semantics, and the main failure mode. It omits what a successful call returns and permission requirements, which are minor given full schema coverage and existing annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds patch semantics the schema does not state — omitting a field preserves it, null clears it — which is the key invocation detail for this tool. Only the required testSuiteId is left unaddressed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States specific verbs and the exact resource: rename a test suite or change its description/category. The fields named map directly to the mutable parameters, so an agent can distinguish it from create_test_suite, delete_test_suite, and update_test_case without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete operating rules: null clears a field, omission leaves it unchanged, and duplicate-name renames are refused within the project. It stops short of naming alternatives (e.g., create_test_suite for new suites) or when-not-to-use conditions, but the patch semantics are explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.upload_attachmentUpload attachmentAInspect

Upload a file to a story. Accepted mimeTypes: image/png, image/jpeg, image/gif, image/webp, application/pdf, application/zip (also .docx/.xlsx/.pptx), text/plain (logs, JSON, CSV, markdown — anything the sniffer reads as text). Pass the binary data as base64. Max 3 MB decoded (larger files: attach them in the Stride app). Binary types are validated by magic bytes against the declared mimeType; text has no magic bytes and passes on its declared text/plain. Returns the metadata + a URL to fetch the binary from REST.

NameRequiredDescriptionDefault
dataYesBase64-encoded file body (≤ 4 MiB encoded / 3 MB decoded).
storyIdYesStory ticket key like "ORB-526" or a Stride UUID.
filenameYes
mimeTypeYesDeclared MIME type (e.g. image/png).

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare write/non-destructive/non-idempotent; the description adds substantive behavior the agent could not infer: magic-byte validation against the declared mimeType, the special no-magic-bytes case for text/plain, the 3 MB decoded ceiling, and that the response includes metadata plus a fetch URL. It omits error/duplicate behavior, which is the main remaining gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action, then layers constraints and return shape; nearly every clause carries information. The dense em-dash parenthetical on text/plain is slightly hard to parse but not wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but the description states what comes back (metadata + URL), and it covers encoding, size, and type validation. Missing prerequisites (permissions, story must exist) and failure modes keep it from fully complete for a 4-required-param mutation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75%, and the description compensates well: it enumerates the accepted mimeType values (schema gives only an example), restates the base64/size contract for data, and clarifies that mimeType must match actual content. filename semantics (display name, extension handling) are still undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Upload a file to a story") that no sibling can be confused with; list_attachments/delete_attachment are clearly separate operations. An agent knows immediately what this does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete exclusion with an alternative for oversized files ("larger files: attach them in the Stride app"), which is real routing guidance. It does not, however, say when to upload vs. reference a document, or note prerequisites like story existence or permissions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stride.whoamiWho am IA
Read-onlyIdempotent
Inspect

Who am I: the workspace, the member this session acts for (spend + audit attribution), the agent's bot user (never assignable), the key's provider/scope and the projects it can reach, and the synthesised role. Other tools' output does not state this identity, so it is the reliable first call in a cold start. Read-only, no arguments.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false and destructiveHint=false, so 'Read-only, no arguments' largely restates structured data. The one genuinely additive trait is the semantic caveat that the agent's bot user is 'never assignable' and that the member is used for spend + audit attribution, which tells the agent how to interpret the values. Beyond that there is no disclosure of failure modes (e.g. what happens with an unauthenticated/expired key) even though the tool is the first call in a session.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, both load-bearing, with purpose and return contents front-loaded and the usage rule second. The field enumeration is a long comma-run and slightly dense, but each item conveys distinct returned information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description must convey what comes back, and it does so field-by-field plus the important 'never assignable' constraint on the bot user. For a zero-param read tool this is complete enough that an agent can call it without guessing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero-parameter tool, so the baseline is 4; the description confirms 'no arguments', matching the empty schema with additionalProperties=false. No further parameter detail is possible.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb+resource ('who am I') and then enumerates exactly what identity facts are returned: workspace, acting member, bot user, key provider/scope/projects, synthesised role. Nothing among the ~120 siblings does this, and the tool is distinguishable on the name plus the returned-field list alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Other tools' output does not state this identity, so it is the reliable first call in a cold start' gives an explicit selection rule and a concrete trigger (cold start) that no sibling provides. It also implicitly excludes itself from the mutation workflows that dominate the sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 131 tool updates
    • First observedstride.add_project_member
    • First observedstride.append_to_document
    • First observedstride.assign_story
    • First observedstride.bulk_update_stories
    • First observedstride.create_comment
    • First observedstride.create_cross_link
    • First observedstride.create_defect
    • First observedstride.create_document
    • First observedstride.create_epic
    • First observedstride.create_label
    • First observedstride.create_quality_gate
    • First observedstride.create_release
    • First observedstride.create_sprint
    • First observedstride.create_story
    • First observedstride.create_story_relation
    • First observedstride.create_test_case
    • First observedstride.create_test_case_from_ac
    • First observedstride.create_test_run
    • First observedstride.create_test_suite
    • First observedstride.delete_attachment
    • First observedstride.delete_comment
    • First observedstride.delete_cross_link
    • First observedstride.delete_defect
    • First observedstride.delete_design
    • First observedstride.delete_diagram
    • First observedstride.delete_document
    • First observedstride.delete_epic
    • First observedstride.delete_label
    • First observedstride.delete_process
    • First observedstride.delete_quality_gate
    • First observedstride.delete_release
    • First observedstride.delete_sprint
    • First observedstride.delete_story
    • First observedstride.delete_story_relation
    • First observedstride.delete_test_case
    • First observedstride.delete_test_run
    • First observedstride.delete_test_suite
    • First observedstride.end_session
    • First observedstride.generate_diagram
    • First observedstride.generate_process
    • First observedstride.generate_ui_design
    • First observedstride.get_adr
    • First observedstride.get_defect
    • First observedstride.get_design_context
    • First observedstride.get_diagram
    • First observedstride.get_document
    • First observedstride.get_epic
    • First observedstride.get_legacy_evidence
    • First observedstride.get_legacy_parity
    • First observedstride.get_legacy_system
    • First observedstride.get_modernization_repo_status
    • First observedstride.get_process
    • First observedstride.get_process_kpis
    • First observedstride.get_quality_gate
    • First observedstride.get_release
    • First observedstride.get_sprint
    • First observedstride.get_sprint_metrics
    • First observedstride.get_sprint_test_health
    • First observedstride.get_story
    • First observedstride.get_story_context
    • First observedstride.get_test_case
    • First observedstride.get_test_run
    • First observedstride.get_tool_call_status
    • First observedstride.link_design
    • First observedstride.link_diagram
    • First observedstride.list_adrs
    • First observedstride.list_attachments
    • First observedstride.list_comments
    • First observedstride.list_cross_links
    • First observedstride.list_defects
    • First observedstride.list_designs
    • First observedstride.list_diagrams
    • First observedstride.list_epics
    • First observedstride.list_labels
    • First observedstride.list_legacy_systems
    • First observedstride.list_process_insights
    • First observedstride.list_processes
    • First observedstride.list_project_members
    • First observedstride.list_projects
    • First observedstride.list_quality_gates
    • First observedstride.list_recent_activity
    • First observedstride.list_releases
    • First observedstride.list_sprints
    • First observedstride.list_stories
    • First observedstride.list_story_activity
    • First observedstride.list_story_relations
    • First observedstride.list_test_cases
    • First observedstride.list_test_plans
    • First observedstride.list_test_results
    • First observedstride.list_test_runs
    • First observedstride.list_test_suites
    • First observedstride.list_workflow_stages
    • First observedstride.next_task
    • First observedstride.prepare_modernization_backlog
    • First observedstride.record_test_results
    • First observedstride.refine_ui_design
    • First observedstride.remove_project_member
    • First observedstride.rerun_failed_tests
    • First observedstride.restore_defect
    • First observedstride.restore_design
    • First observedstride.restore_diagram
    • First observedstride.restore_epic
    • First observedstride.restore_process
    • First observedstride.restore_release
    • First observedstride.restore_sprint
    • First observedstride.restore_story
    • First observedstride.restore_test_case
    • First observedstride.run_process_insights
    • First observedstride.run_quality_gate_check
    • First observedstride.search_documents
    • First observedstride.search_stories
    • First observedstride.start_story_work
    • First observedstride.suggest_cross_links
    • First observedstride.toggle_reaction
    • First observedstride.transition_sprint
    • First observedstride.trigger_legacy_reanalysis
    • First observedstride.update_comment
    • First observedstride.update_defect
    • First observedstride.update_document
    • First observedstride.update_epic
    • First observedstride.update_label
    • First observedstride.update_project_member_role
    • First observedstride.update_quality_gate
    • First observedstride.update_release
    • First observedstride.update_sprint
    • First observedstride.update_story
    • First observedstride.update_story_status
    • First observedstride.update_test_case
    • First observedstride.update_test_suite
    • First observedstride.upload_attachment
    • First observedstride.whoami

Publisher details

Operator
Newlight Solutions
Operator website
https://www.stride.page
Vendor relationship
First-party
Restrictions
Needs a Stride workspace on a paid plan. Each app you sign in uses one of the plan's API or agent keys (Starter includes one).

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.