Entalpa Requirements MCP
Server Details
Spec-driven development for AI coding agents: live requirements, stories and traceability over MCP
- Status
- Healthy
- Uptime
- 21.6% over 78 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 79 tools
Despite very detailed descriptions, the surface has many near-duplicate pairs: projects_patch/projects_update, requirements_patch/requirements_update, interface_contracts_patch/update, plus three alignment tools and four AI-suggestion tools (analyze, generate, audit_backlog, propagate_stories) whose boundaries require careful reading. An agent can easily misselect among patch vs update, and among align_to_story/align_requirements/align_stakeholders.
Most tools are resource_action snake_case, but the set mixes plural-prefixed families (projects_, stakeholders_, stories_, requirements_, subsystems_) with singular oddities (project_search, requirement_items_list, create_project_snapshot, get_project_snapshot, restore_project_snapshot), verb-first names (resolve_ids, users_get_me), and underscore vs non-underscore resource grouping (interface_contracts_).
79 tools is far beyond a reasonable scoped surface; the server exposes entire CRUD families, AI proposal tools, import/export formats, snapshot/diff/undo machinery, and suggestion review in one set. This is an extreme mismatch that will overwhelm tool selection.
Coverage is broad: CRUD for projects, stakeholders, stories, requirements, subsystems, and interface contracts, plus snapshots, diff, import/export, undo/redo, and AI proposal workflows. Minor gaps exist, e.g. no open_questions_create/delete and no snapshot deletion, but core lifecycle operations are present.
Available Tools
79 toolscreate_project_snapshotCreate Project SnapshotAInspect
Save a snapshot of the project's current state. Use the returned snapshot_id as the base for projects_diff, or to restore with restore_project_snapshot.
| Name | Required | Description | Default |
|---|---|---|---|
| snapshot | Yes | Snapshot fields to create. | |
| project_id | Yes | Project UUID (database id). |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | Snapshot name. |
| created_at | Yes | Snapshot creation timestamp (ISO 8601). |
| project_id | Yes | Project UUID (database id). |
| description | No | Optional snapshot description. |
| snapshot_id | Yes | Snapshot UUID (database id). Use as the base for projects_diff. |
| created_by_id | No | UUID of the user who created the snapshot. |
| schema_version | Yes | Project state schema version stored in the snapshot. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds the useful chaining fact that a snapshot_id is returned and consumed by diff/restore, but says nothing about limits, naming collisions, or permissions required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste, with the core action front-loaded and the follow-up routing second. Nothing needs to be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description covers the action plus downstream chaining. What remains missing is idempotency/uniqueness behavior for snapshot names, which matters for a mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including descriptions for the nested snapshot name/description fields and project_id, so the schema carries parameter meaning on its own. The description adds no syntax, format, or constraint details beyond that, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Save a snapshot of the project's current state.' An agent can distinguish this from get_project_snapshot, projects_list_snapshots, and restore_project_snapshot 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly routes the agent forward, naming projects_diff as the consumer of the returned snapshot_id and restore_project_snapshot as the restore path. It does not, however, say when to create a snapshot versus just relying on existing snapshots or what preconditions exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_project_snapshotGet Project SnapshotARead-onlyIdempotentInspect
Get a saved snapshot's full detail, including the project state captured at snapshot time.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). | |
| snapshot_id | Yes | Snapshot UUID (database id). |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | Snapshot name. |
| payload | Yes | Full project state captured at snapshot time. |
| created_at | Yes | Snapshot creation timestamp (ISO 8601). |
| project_id | Yes | Project UUID (database id). |
| description | No | Optional snapshot description. |
| snapshot_id | Yes | Snapshot UUID (database id). Use as the base for projects_diff. |
| created_by_id | No | UUID of the user who created the snapshot. |
| schema_version | Yes | Project state schema version stored in the snapshot. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=false, so the safety profile is covered. The description adds that the response includes the project state captured at snapshot time, which is useful context, but says nothing about failure modes (e.g., unknown snapshot_id) or whether the snapshot content is static.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with no filler, front-loaded with the verb and the scope of what is returned. It is appropriately sized for a simple two-parameter read tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained in prose, and annotations cover the read-only/idempotent nature. What remains is minor: no mention of behavior when the snapshot does not exist or belongs to another project.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with two UUID parameters fully documented in the schema, so the description need not restate them. It adds no extra meaning about how project_id and snapshot_id interact, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Get) and resource (a saved snapshot's full detail), making it clearly distinct from projects_list_snapshots and create_project_snapshot. It does not explicitly name a sibling, but 'full detail' implicitly contrasts with list-style tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the agent can infer this is the tool to call when it needs a snapshot's complete contents rather than a list. There is no explicit statement of when to prefer this over projects_list_snapshots or restore_project_snapshot, and no prerequisites noted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
interface_contracts_createInterface Contracts CreateCInspect
Create an interface contract between two subsystems.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). | |
| interface_contract | Yes | Interface contract fields. |
Output Schema
| Name | Required | Description |
|---|---|---|
| lock | Yes | True to lock the requirement from LLM modifications. |
| flags | Yes | List of requirement flags/tags. |
| content | Yes | Free-form interface contract metadata returned by the server. Raw interface contract content need not contain a requirement id or statement; its values may be strings or lists of strings. |
| human_id | Yes | Generated interface requirement identifier, for example REQ-INT-001. |
| project_id | Yes | Project UUID (database id). |
| interface_type | Yes | Interface type. Supported values: DATA, TRIGGER, STATE. |
| description_payload | Yes | Payload, event, or state condition that crosses the interface. |
| source_subsystem_id | Yes | Subsystem UUID (database id). |
| target_subsystem_id | Yes | Subsystem UUID (database id). |
| interface_contract_id | Yes | Interface contract UUID (database id). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the safety profile is partly covered. The description adds nothing beyond that: it does not say whether creation is idempotent, what happens on duplicate interfaces, whether the new contract is locked by default, or what identifiers come back. For a create tool with nested objects and an explicit 'lock' flag, meaningful behavioral context is missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler, so nothing needs trimming. Its brevity is efficient rather than padded, though it is arguably too thin to earn a top score on structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema exists, so return values need not be explained, and the 100%-covered input schema documents fields. Still, for a creation tool over two subsystem references with nested metadata, the description omits any notion of required prior state, duplicate handling, or how the interface is scoped to the project, leaving a noticeable gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the rich nested schema (source/target subsystem ids, interface_type enum values DATA/TRIGGER/STATE, description_payload, lock, content metadata) already carries full parameter meaning. The description adds no format, constraint, or payload-shape guidance beyond it, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb+resource ('Create an interface contract') and adds scope ('between two subsystems'), which is enough to distinguish it from interface_contracts_update, interface_contracts_patch, and interface_contracts_get just by name. It does not, however, explicitly contrast itself with any sibling, so it lands at 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus interface_contracts_update or interface_contracts_patch, and no prerequisites are stated (e.g. that project_id and both subsystem UUIDs must already exist). The agent must infer usage entirely from the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
interface_contracts_deleteInterface Contracts DeleteBDestructiveInspect
Delete an interface contract by UUID.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). | |
| interface_contract_id | Yes | Interface contract UUID (database id). |
Output Schema
| Name | Required | Description |
|---|---|---|
| deleted | Yes | True when the item was deleted. |
| interface_contract_id | Yes | Interface contract UUID (database id). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is carried by structured data. The description adds nothing beyond the action itself: it does not say whether the deletion is permanent, whether it cascades to related items, or whether confirmation/auth is required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no waste. It is efficient but arguably too terse to convey the destructive semantics the caller should be aware of.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity 2-param tool with an output schema (no need to describe return values) and annotations covering the destructive profile, the description is adequate. It leaves only minor gaps around reversibility and cascade behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (project_id, interface_contract_id) are already fully documented in the schema. The description's 'by UUID' mirrors rather than extends the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (delete) and resource (interface contract) plus the identifier used. It is clear what the tool does, though it does not explicitly distinguish itself from the update/patch siblings, which also mutate a single contract.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of alternatives (e.g., update vs. delete, or how to locate the UUID first). The agent must infer selection from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
interface_contracts_getInterface Contracts GetBRead-onlyIdempotentInspect
Get an interface contract by id.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). | |
| interface_contract_id | Yes | Interface contract UUID (database id). |
Output Schema
| Name | Required | Description |
|---|---|---|
| lock | Yes | True to lock the requirement from LLM modifications. |
| flags | Yes | List of requirement flags/tags. |
| content | Yes | Free-form interface contract metadata returned by the server. Raw interface contract content need not contain a requirement id or statement; its values may be strings or lists of strings. |
| human_id | Yes | Generated interface requirement identifier, for example REQ-INT-001. |
| project_id | Yes | Project UUID (database id). |
| interface_type | Yes | Interface type. Supported values: DATA, TRIGGER, STATE. |
| description_payload | Yes | Payload, event, or state condition that crosses the interface. |
| source_subsystem_id | Yes | Subsystem UUID (database id). |
| target_subsystem_id | Yes | Subsystem UUID (database id). |
| interface_contract_id | Yes | Interface contract UUID (database id). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=false, so the safety profile is fully covered by structured data. The description adds no behavioral context beyond that — no mention of not-found behavior, permissions, or lookup semantics — so it contributes essentially nothing new.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler, and the identifying parameter ('by id') appears immediately. Nothing in the sentence is redundant with the name or title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, annotations covering the safety profile, and full parameter documentation in the schema, the description does not need to explain return values. For a simple UUID-keyed get, it is nearly sufficient, though it omits any note about missing-record behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both project_id and interface_contract_id documented as UUIDs in the schema, so the baseline is 3. The description adds no syntax or constraint detail beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Get an interface contract by id'), which cleanly separates it from the create/delete/list/patch siblings in the same family. It does not explicitly name or contrast against those siblings, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus siblings like interface_contracts_list or interface_contracts_get_many-style alternatives, and no prerequisites or exclusions are stated. Usage is only implied by the word 'Get' and the required id parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
interface_contracts_listInterface Contracts ListCRead-onlyIdempotentInspect
List interface contracts for a project.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). |
Output Schema
| Name | Required | Description |
|---|---|---|
| interface_contracts | Yes | Interface contracts for the project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint=false, so the safety profile is covered. The description adds nothing beyond that—no pagination behavior, ordering, filtering, or result-size context—leaving meaningful behavioral gaps for a list endpoint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero waste. It is efficient, though the extreme brevity leaves little room to convey anything else, so it is not maximally informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be described, and the single required parameter is fully covered by the schema. However, for a list tool the description omits any indication of pagination, filtering, or result scope, so it is only minimally adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single project_id parameter is fully documented as a project UUID in the schema. The description adds no syntax or format detail beyond 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb ('List') and resource ('interface contracts') scoped to a project, which is enough to distinguish it from the singular interface_contracts_get and the create/delete/update siblings. It is specific but does not explicitly name or contrast an alternative, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use context and never mentions the alternative of retrieving a single contract via interface_contracts_get. An agent must infer usage purely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
interface_contracts_patchInterface Contracts PatchCInspect
Patch an interface contract.
| Name | Required | Description | Default |
|---|---|---|---|
| patch | Yes | Interface contract fields to patch. | |
| project_id | Yes | Project UUID (database id). | |
| interface_contract_id | Yes | Interface contract UUID (database id). |
Output Schema
| Name | Required | Description |
|---|---|---|
| lock | Yes | True to lock the requirement from LLM modifications. |
| flags | Yes | List of requirement flags/tags. |
| content | Yes | Free-form interface contract metadata returned by the server. Raw interface contract content need not contain a requirement id or statement; its values may be strings or lists of strings. |
| human_id | Yes | Generated interface requirement identifier, for example REQ-INT-001. |
| project_id | Yes | Project UUID (database id). |
| interface_type | Yes | Interface type. Supported values: DATA, TRIGGER, STATE. |
| description_payload | Yes | Payload, event, or state condition that crosses the interface. |
| source_subsystem_id | Yes | Subsystem UUID (database id). |
| target_subsystem_id | Yes | Subsystem UUID (database id). |
| interface_contract_id | Yes | Interface contract UUID (database id). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the safety profile is covered structurally. However, the description adds nothing of its own — notably it never explains patch semantics (partial/merge vs replace) or what happens to omitted fields, which is the single most important behavioral distinction of a patch tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single four-word sentence is structurally clean and front-loaded with the verb, but here brevity reflects under-specification rather than discipline. It is not padded, so it avoids a lower score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a nested patch payload, 100% schema coverage and the presence of an output schema, the description still owes the agent the patch-vs-update distinction and merge behavior. One sentence is inadequate for a mutation tool with this schema complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema documents all three parameters, including the nested patch object and its ignored generated keys, so the schema carries the load. The description contributes zero additional parameter meaning, making the baseline 3 correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description is a verbatim restatement of the tool name and title ('Patch an interface contract'), which the rubric defines as tautology. It gives no indication of what distinguishes this from interface_contracts_update or requirements_patch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no statement of prerequisites, and no mention of the alternative tools (interface_contracts_update, requirements_patch) an agent should weigh against it. The agent is left to infer everything from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
interface_contracts_updateInterface Contracts UpdateAInspect
Update an interface contract. Content merges by key: send only changed content keys, using arrays for metadata, to preserve existing scalar/list values. PUT requires endpoints, interface_type and description_payload and resets omitted flags and lock; include their current values to preserve them. Prefer interface_contracts_patch for partial edits.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). | |
| interface_contract | Yes | Interface contract fields. | |
| interface_contract_id | Yes | Interface contract UUID (database id). |
Output Schema
| Name | Required | Description |
|---|---|---|
| lock | Yes | True to lock the requirement from LLM modifications. |
| flags | Yes | List of requirement flags/tags. |
| content | Yes | Free-form interface contract metadata returned by the server. Raw interface contract content need not contain a requirement id or statement; its values may be strings or lists of strings. |
| human_id | Yes | Generated interface requirement identifier, for example REQ-INT-001. |
| project_id | Yes | Project UUID (database id). |
| interface_type | Yes | Interface type. Supported values: DATA, TRIGGER, STATE. |
| description_payload | Yes | Payload, event, or state condition that crosses the interface. |
| source_subsystem_id | Yes | Subsystem UUID (database id). |
| target_subsystem_id | Yes | Subsystem UUID (database id). |
| interface_contract_id | Yes | Interface contract UUID (database id). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare this is a non-read-only write, but the description adds the crucial behavioral trait that omitted flags and lock are RESET by a PUT and must be re-sent to be preserved. That data-loss warning goes well beyond the structured fields and is exactly the kind of context that prevents an agent from silently wiping values.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, front-loaded with the operation, then merge behavior, then the reset warning, then the alternative. No filler; every sentence carries actionable information for a nested-object tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and the description covers the tricky write semantics for this nested-payload update. Auth/permission expectations are unstated, but for this complexity the description is sufficient to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, and the description exceeds it by explaining the merge semantics of 'content' (send only changed keys, arrays for metadata) and which fields a PUT requires. It adds real meaning beyond the field-level schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Update an interface contract') and immediately distinguishes the operation from its closest sibling by steering partial edits to interface_contracts_patch. An agent can tell this apart from the PATCH variant 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Prefer interface_contracts_patch for partial edits' names the alternative and the condition that selects it, which is strong routing guidance. It stops short of explicitly stating when a full PUT (as opposed to a patch) is the right choice, leaving that condition to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_questions_answerOpen Questions AnswerAInspect
Answer or dismiss an open question. Supplying an answer marks it answered; answered questions are fed back into later elicitation and are never overwritten by regeneration.
| Name | Required | Description | Default |
|---|---|---|---|
| answer | No | The user's answer. Supplying one marks the question answered. | |
| status | No | One of 'open', 'answered' or 'dismissed'. 'open' means still unresolved and may be replaced when questions regenerate; 'answered' and 'dismissed' are the user's decisions and are never overwritten. | |
| project_id | Yes | Project UUID (database id). | |
| open_question_id | Yes | Open question UUID (database id). |
Output Schema
| Name | Required | Description |
|---|---|---|
| answer | No | The user's answer. Supplying one marks the question answered. |
| status | Yes | One of 'open', 'answered' or 'dismissed'. 'open' means still unresolved and may be replaced when questions regenerate; 'answered' and 'dismissed' are the user's decisions and are never overwritten. |
| human_id | Yes | Open question human id (e.g. Q-001). |
| question | Yes | The question put to the user. |
| story_id | No | Story UUID (database id). |
| rationale | No | What stays ambiguous in the spec until the question is answered. |
| project_id | Yes | Project UUID (database id). |
| open_question_id | Yes | Open question UUID (database id). |
| resulting_story_id | No | UUID of the story this question's answer was converted into, if any. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false and destructiveHint=false. The description adds genuinely behavioral context beyond that: supplying an answer marks it answered, and answered/dismissed states are never overwritten by regeneration. It doesn't state what happens if the question ID is stale or invalid, but the persistence guarantee is a meaningful disclosure 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero padding; the core action is front-loaded and the second sentence carries only the non-obvious persistence rule. Nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values needn't be explained, and annotations cover the safety profile. The description supplies the one thing an agent would otherwise have to guess — that answers are durable across regeneration — though it says nothing about error or invalid-id behavior for a required-UUID mutation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents answer, status, project_id and open_question_id. The description restates the answer/answered linkage that is already in the answer parameter description, adding no new syntax, format or constraint information. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair (answer/dismiss) and a specific resource (an open question), and the second sentence clarifies the two outcomes. It does not explicitly differentiate itself from siblings like open_questions_list or open_questions_convert_to_story, but the mutation semantics are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the usage context (resolving an open question raised earlier in elicitation) and notes that the answer feeds back into later elicitation, but it never states when to use this versus convert_to_story or general regeneration. 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.
open_questions_convert_to_storyOpen Questions Convert To StoryAInspect
Write an answered open question's decision into the backlog. A question asked about a story usually revises that story (action "revise"); a question about the whole project can revise the story whose goal its answer settles (revises_story_id). Otherwise, or when the answer settles a different goal, it becomes a new story. The text and the action are drafted for you when content is omitted; pass dry_run to read the draft (with the story's previous text, and any reviewed requirements to revisit) without changing anything, then pass content, action and revises_story_id back. action without content drafts for that action instead of letting the model choose. A new story is aligned to stakeholders unless run_align_to_story is false; when that fails, the story is saved all the same and alignment_failure says why. Fails with 409 if the question is unanswered or already converted.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | With content: "revise" rewrites the story the question was asked about (or, for a question about the whole project, the story in revises_story_id) with content; "new" (the default) adds a story. Pass back the action a dry run returned, or override it. | |
| content | No | Story text to use. Omit to have it drafted from the question and answer. | |
| dry_run | No | If true, return the drafted story text without creating the story. | |
| human_id | No | Story human label (e.g. S-3), for creation and display. | |
| project_id | Yes | Project UUID (database id). | |
| open_question_id | Yes | Open question UUID (database id). | |
| revises_story_id | No | UUID of the story to revise, as returned by the dry run. For a story-scoped question it must match the associated story. | |
| run_align_to_story | No | If true, run the align_to_story LLM job after saving the story. |
Output Schema
| Name | Required | Description |
|---|---|---|
| story | No | Story summary fields. |
| action | Yes | "revise": content replaces the story in revises_story_id (the one the question was asked about, or the one its answer settles). "new": content is a new story. |
| content | Yes | Story text to use. Omit to have it drafted from the question and answer. |
| question | No | Open question summary fields. |
| previous_content | No | For a revision: the story's text before it. |
| revises_story_id | No | For a revision: UUID of the story it rewrites. |
| alignment_failure | No | For a new story: why it could not be aligned to stakeholders. The story and the question's link to it are saved all the same, so converting again is refused; align it with stories_update and `run_align_to_story: true`. |
| requirement_labels | No | Human labels keyed by UUID for requirements_to_revisit. |
| revises_story_label | No | For a revision: human story label for display. |
| requirements_to_revisit | No | For a revision of a story whose requirements are reviewed or further along: those requirements, which the changed story may no longer match. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the safety profile (readOnlyHint=false, destructiveHint=false); the description adds substantial behavior beyond them: text/action are auto-drafted when content is omitted, dry_run previews the draft including prior text and reviewed requirements, alignment failures still save the story and surface via alignment_failure, and 409 fires on unanswered/already-converted questions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and outcome branching, and every sentence carries actionable information. It is dense and somewhat run-on across five sentences, but there is little wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values needn't be re-explained, and the description still covers the mutation semantics, dry-run preview flow, alignment failure handling, and error condition. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description adds real meaning: how action interacts with content and revises_story_id (including the project-scoped vs story-scoped rule), that passing action without content drafts for that action, and that action/revises_story_id should be passed back from a dry run.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Write an answered open question's decision into the backlog,' then explains the two concrete outcomes (revise an existing story or create a new one). This clearly distinguishes it from siblings like stories_create and open_questions_answer 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: a story-scoped question 'usually revises that story,' a project-scoped question revises the settled story via revises_story_id, and 'otherwise... it becomes a new story.' It also states when to omit content (drafting), when to pass dry_run, and what the 409 failure conditions are.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_questions_listOpen Questions ListARead-onlyIdempotentInspect
List the project's open elicitation questions. These are the points the spec leaves unresolved; read them before assuming intent. Filter by status ('open', 'answered', 'dismissed') or by story.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | One of 'open', 'answered' or 'dismissed'. 'open' means still unresolved and may be replaced when questions regenerate; 'answered' and 'dismissed' are the user's decisions and are never overwritten. | |
| story_id | No | Story UUID (database id). | |
| project_id | Yes | Project UUID (database id). |
Output Schema
| Name | Required | Description |
|---|---|---|
| open_questions | Yes | Open questions for the project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and openWorldHint=false, so the safety profile is covered by structured data. The description adds semantic context about what open questions represent, but says nothing about the lifecycle nuance (the schema notes 'open' questions may be replaced on regeneration), which would be the valuable extra detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: the action and the conceptual definition come first, then the filtering options. Nothing is wasted and the most decision-relevant information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be described, and annotations cover safety and world scope. The definition covers the essentials for a filtered read-list tool; only the enum-lifecycle nuance from the schema is unstated in prose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema itself thoroughly documents status semantics and both UUID filters. The description only repeats the status values already listed in the schema, adding no syntax or behavioral detail beyond it — the baseline 3 for full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: 'List the project's open elicitation questions,' and further defines what those questions are ('the points the spec leaves unresolved'). That is enough to separate it from siblings like open_questions_answer or open_questions_convert_to_story, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states a clear use condition ('read them before assuming intent') and tells the agent what filters are available. It does not explicitly contrast with the alternative answer/convert tools, which is the only missing piece.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_align_requirements_to_storiesProjects Align Requirements To StoriesAInspect
Propose story-requirement links. Omit selections to use all requirements and stories. Merge accepted links with existing relationships when saving. Returns a proposal without applying the suggested changes. Review it with the user, then save accepted changes using the existing CRUD tools. May take several minutes; progress notifications report elapsed time when supported.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). | |
| user_message | No | Optional instructions to guide this AI operation. | |
| chosen_reqs_ids | No | Requirement UUIDs. | |
| chosen_story_ids | No | Story UUIDs. | |
| extra_requirement_attributes | No | List of extra requirement fields. |
Output Schema
| Name | Required | Description |
|---|---|---|
| links | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=false and openWorldHint=true, so the description's added value is elsewhere: it discloses that the call is proposal-only, that accepted links get merged with existing relationships rather than replacing them, and that execution 'may take several minutes' with progress notifications. That merge-vs-replace detail is exactly the kind of mutation semantics an agent cannot infer from the schema. It does not discuss authorization needs or what happens to the proposal if never accepted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Six short sentences, front-loaded with purpose and with no filler; the runtime note and the save-workflow note each carry distinct information. It is slightly more granular than necessary for a 10% weight dimension, but nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the annotations cover the safety profile; the description still covers propose-only behavior, selection defaults, merge semantics, and latency. The one remaining gap is the purpose of extra_requirement_attributes, which is undocumented in both the schema and the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, and the description adds genuine semantics: omitting chosen_reqs_ids/chosen_story_ids means 'use all requirements and stories,' which defines a default the schema does not state. It remains silent on user_message and extra_requirement_attributes, so it improves on the baseline without fully covering all five parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence gives a specific verb and resource: 'Propose story-requirement links.' Combined with the follow-up that it returns a proposal without applying changes, an agent can distinguish this from the write-oriented siblings (requirements_update, stories_update) and from projects_align_stakeholders_to_stories. It stops short of naming an alternative align tool explicitly, so it is clear but not maximally differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the default behavior ('Omit selections to use all requirements and stories') and the intended workflow ('Review it with the user, then save accepted changes using the existing CRUD tools'), which routes the agent to the right sibling tools for persistence. There is no explicit when-not-to-use guidance or statement of prerequisites (e.g., required project state), so it falls short of the full when/when-not/alternatives bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_align_stakeholders_to_storiesProjects Align Stakeholders To StoriesAInspect
Propose stakeholder-story links. Omit selections to use all stakeholders and stories. Merge accepted links with existing relationships when saving. Returns a proposal without applying the suggested changes. Review it with the user, then save accepted changes using the existing CRUD tools. May take several minutes; progress notifications report elapsed time when supported.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). | |
| user_message | No | Optional instructions to guide this AI operation. | |
| chosen_story_ids | No | Story UUIDs. | |
| chosen_stakeholder_ids | No | Stakeholder UUIDs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| links | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the annotations: it does not apply changes (proposal only), it merges accepted links with existing relationships on save, it may run for several minutes, and progress notifications report elapsed time when supported. The 'without applying changes' statement sits in mild tension with readOnlyHint=false, but the description is clarifying rather than contradicting, and the latency/merge disclosures are exactly the kind of behavior 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Six short sentences with no filler, and the proposal-first constraint is front-loaded. It is slightly longer than strictly necessary but every sentence conveys distinct behavior for this workflow tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a long-running AI proposal tool with an output schema, the description supplies the missing pieces an agent needs: default selection behavior, non-application of changes, merge semantics on save, and the handoff to CRUD tools. Nothing needed to invoke or follow up correctly is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real semantics the schema does not: omitting chosen_story_ids/chosen_stakeholder_ids falls back to all stakeholders and stories. It adds nothing for project_id or user_message, which the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Propose stakeholder-story links') and clearly frames the output as a proposal rather than an applied mutation, which separates it from CRUD-style siblings. It does not name the nearest analogue, projects_align_requirements_to_stories or projects_align_to_story, so the sibling differentiation relies on the agent inferring from the 'stakeholder' vs 'requirement' wording.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete operational guidance: omit selections to default to all stakeholders/stories, review the proposal with the user, then persist accepted links via existing CRUD tools. It says when to use and where the follow-up write happens, though it never states when not to use this in favor of the sibling align tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_align_to_storyProjects Align To StoryAInspect
Propose stakeholders for an existing story identified by UUID, including a new stakeholder if needed. Merge accepted links with existing relationships when saving. Returns a proposal without applying the suggested changes. Review it with the user, then save accepted changes using the existing CRUD tools. May take several minutes; progress notifications report elapsed time when supported.
| Name | Required | Description | Default |
|---|---|---|---|
| story_id | Yes | Story UUID. | |
| project_id | Yes | Project UUID (database id). | |
| user_message | No | Optional instructions to guide this AI operation. |
Output Schema
| Name | Required | Description |
|---|---|---|
| stakeholder_ids | No | |
| new_stakeholder_name | No | Stakeholder name or role. |
| new_stakeholder_description | No | Optional stakeholder description. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds meaningful behavior beyond the annotations: it returns a proposal without applying changes, merges accepted links with existing relationships on save, and may run for minutes with progress notifications. It also implicitly clarifies the tension with readOnlyHint=false by stating that no suggested changes are applied. This is rich disclosure, though the persistence semantics of the 'proposal' itself remain slightly unclear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, purpose front-loaded, each carrying distinct information (proposal semantics, merge behavior, next step, latency). The progress-notification clause is marginally extraneous but overall it is tight and well ordered.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a rich output schema present, the description needn't explain return values, and the annotations cover the safety profile. It fills the remaining gaps by describing the async/long-running nature, the non-application guarantee, and the follow-up save path. Complete enough for an agent to call and act on it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (story_id, project_id, user_message) are already documented in the schema. The description adds the notion of 'including a new stakeholder if needed' but no parameter-level syntax or format detail beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Propose stakeholders for an existing story identified by UUID.' This clearly distinguishes it from the alignment siblings (requirements-to-stories, stakeholders-to-stories) by naming the input (a story UUID) and the output (stakeholder proposals). It stops short of explicitly naming which sibling to prefer, so it is clear but not fully differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit workflow guidance: 'Review it with the user, then save accepted changes using the existing CRUD tools,' which tells the agent what this tool does NOT do and where to go next. It lacks an explicit 'when-not' or named alternative tool for edge cases, 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.
projects_analyzeProjects AnalyzeAInspect
Analyze selected requirements by UUID and propose revisions or removals. Returns a proposal without applying it, and saves it for review: saved_suggestions lists the saved items' ids, and its review_url opens them in the Entalpa app. Apply the items the user accepts by passing their ids to suggestions_accept, and decline the rest with suggestions_reject. Do not recreate accepted items with the CRUD tools: the saved suggestions would stay pending, to be applied twice. Running this tool again only proposes again, replacing what it saved for the same targets; it applies nothing. Without saved_suggestions, look for the items with suggestions_list, and only when they are not there, create the accepted items with the CRUD tools. May take several minutes; progress notifications report elapsed time when supported.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). | |
| subsystem_id | No | Subsystem UUID (database id). | |
| user_message | No | Optional instructions to guide this AI operation. | |
| chosen_reqs_ids | Yes | Requirement UUIDs. | |
| extra_requirement_attributes | No | List of extra requirement fields. |
Output Schema
| Name | Required | Description |
|---|---|---|
| analysis_summary | Yes | |
| saved_suggestions | No | What this run saved for review. Apply the items the user accepts by passing their ids to suggestions_accept, and decline the rest with suggestions_reject. review_url opens them in the Entalpa app. |
| overall_recommendation | Yes | |
| detailed_requirement_analysis | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds rich behavioral context beyond the annotations: it returns a proposal without applying it, re-running only proposes again and replaces saved items for the same targets, it applies nothing, and it may take several minutes with progress notifications. The write behavior (saving suggestions) is consistent with readOnlyHint=false and destructiveHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose before workflow routing, and nearly every sentence carries actionable information. It is somewhat long and dense, but the detail is justified by the multi-step workflow rather than padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex, multi-step, write-related analysis tool with an output schema, it covers the proposal-vs-apply distinction, downstream routing, fallback ordering, re-run semantics, and latency. An agent has everything needed to call it and act on the result correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are already documented. The description restates 'by UUID' for the target requirements but adds no syntax or format detail beyond the schema, warranting the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb (analyze), resource (selected requirements by UUID), and outcome (propose revisions or removals). It clearly distinguishes itself from CRUD siblings and from suggestions_accept/reject by framing itself as the proposal-generating step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: accepted items go to suggestions_accept, declined to suggestions_reject, and recreating with CRUD tools is forbidden. It also sequences the fallback (use suggestions_list, and only if absent, create via CRUD), covering when-not and alternatives thoroughly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_ask_extra_featureProjects Ask Extra FeatureAInspect
Suggest missing features and clarifying stakeholder questions; optionally supply previously rejected suggestions. Returns a proposal without applying the suggested changes. Review it with the user, then save accepted changes using the existing CRUD tools. May take several minutes; progress notifications report elapsed time when supported.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). | |
| user_message | No | Optional instructions to guide this AI operation. | |
| rejected_stories | No | ||
| n_stories_to_generate | No | Number of suggestions, 1 to 10. Defaults to 2. |
Output Schema
| Name | Required | Description |
|---|---|---|
| stories | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only give readOnlyHint=false/openWorldHint=true/destructiveHint=false; the description adds three traits beyond that: the call is proposal-only and does not mutate project data, it may take several minutes, and it emits progress notifications with elapsed time when supported. The latency and non-mutation disclosure are exactly what an agent needs before scheduling a long, side-effect-free generation call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each load-bearing: action and output shape first, workflow second, operational caveat last. No filler and no repetition of schema or annotation content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description covers the essential arc (propose → review → persist). The only gap is that 'the existing CRUD tools' is left unnamed, leaving the agent to guess whether follow-up goes through suggestions_accept or stories_create.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 75% (project_id, n_stories_to_generate, user_message all carry descriptions), so the schema is doing the heavy lifting. The description adds only a rationale for rejected_stories ('optionally supply previously rejected suggestions') and says nothing about user_message or the generation count, so it modestly exceeds but does not clear the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a concrete verb+resource ('Suggest missing features and clarifying stakeholder questions') and immediately clarifies the output shape ('Returns a proposal without applying the suggested changes'). It does not name or contrast against the closest siblings (projects_make_stories_from_description, projects_align_requirements_to_stories, suggestions_list), so an agent still has to reason about which generation tool to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear human-in-the-loop workflow: review the proposal with the user, then persist accepted changes via existing CRUD tools. That is real usage context (no auto-apply), but there are no explicit when-not conditions or named alternatives for overlapping generation/alignment tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_assessProjects AssessAInspect
Assess project description and story completeness. Save an accepted score and details with projects_patch using assessment_score and assessment_details. Returns a proposal without applying the suggested changes. Review it with the user, then save accepted changes using the existing CRUD tools. May take several minutes; progress notifications report elapsed time when supported.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). | |
| user_message | No | Optional instructions to guide this AI operation. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | Accepted project completeness assessment, from 0 to 100. |
| details | Yes | Accepted explanation of the project assessment. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark readOnlyHint=false and destructiveHint=false, so the description's key addition is that it returns a proposal without applying suggested changes, resolving the ambiguity of a non-readOnly hint. It also discloses latency (may take several minutes) and progress notifications, though it says nothing about auth needs or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences with the purpose front-loaded and no filler. The save-workflow and latency notes are each worth their space, though the middle two sentences could be tightened into one.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return values need not be restated, and annotations carry the safety profile. The description covers the propose-then-commit workflow and runtime cost, leaving only minor gaps such as what the proposal contains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so project_id and user_message are already documented in the schema. The only parameter-like names in the description (assessment_score, assessment_details) belong to projects_patch, not this tool, so the description adds no parameter meaning of its own.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and object: assess project description and story completeness. It is clearly distinguishable from CRUD siblings, though it doesn't explicitly contrast itself with the similarly-aimed projects_analyze or projects_check_description, so the boundary is left for the agent to infer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete workflow: this tool only proposes, then the agent must review with the user and persist accepted changes via projects_patch (with assessment_score/assessment_details) or the existing CRUD tools. It names the follow-up tool explicitly, but offers no when-not-to-use guidance versus the other analysis siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_audit_backlogProjects Audit BacklogAInspect
Audit the story backlog and propose story creations, updates, or deletions. Returns a proposal without applying it, and saves it for review: saved_suggestions lists the saved items' ids, and its review_url opens them in the Entalpa app. Apply the items the user accepts by passing their ids to suggestions_accept, and decline the rest with suggestions_reject. Do not recreate accepted items with the CRUD tools: the saved suggestions would stay pending, to be applied twice. Running this tool again only proposes again, replacing what it saved for the same targets; it applies nothing. Without saved_suggestions, look for the items with suggestions_list, and only when they are not there, create the accepted items with the CRUD tools. May take several minutes; progress notifications report elapsed time when supported.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). | |
| user_message | No | Optional instructions to guide this AI operation. |
Output Schema
| Name | Required | Description |
|---|---|---|
| mutations | Yes | |
| saved_suggestions | No | What this run saved for review. Apply the items the user accepts by passing their ids to suggestions_accept, and decline the rest with suggestions_reject. review_url opens them in the Entalpa app. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false, openWorldHint=true, destructiveHint=false; the description goes well beyond by disclosing that it saves but does not apply a proposal, that saved_suggestions/review_url are produced, the double-application hazard, that re-running replaces prior saved items rather than applying, and that execution may take minutes with progress notifications. This is rich, non-redundant behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then the workflow, then the recovery path, with every sentence carrying distinct operational information. It is dense and multi-sentence, but nothing is filler; a slightly tighter grouping of the apply/decline rules would make it a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a multi-step, stateful audit tool, the description covers the full lifecycle: propose, save, review (saved_suggestions/review_url), accept/decline, the CRUD double-apply trap, re-run behavior, and a fallback when saved_suggestions is absent. An output schema exists, so return values need no further explanation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters (project_id, user_message) are fully documented in the schema, so the baseline is 3. The description adds nothing about parameter formats or how project_id/user_message shape the audit beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Audit the story backlog') plus the exact output ('propose story creations, updates, or deletions'), and distinguishes itself from siblings by naming suggestions_accept, suggestions_reject, suggestions_list and the CRUD story tools. An agent can tell this is a propose-only audit tool 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit lifecycle routing: apply accepted items via suggestions_accept, decline via suggestions_reject, do NOT recreate accepted items with CRUD tools (with the reason: double application), and a fallback chain (suggestions_list, then CRUD only if absent). Both when-to-use and when-not-to-use are covered, including the re-run semantics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_check_descriptionProjects Check DescriptionAInspect
Check whether description text is sufficiently detailed before creating a project. Returns feedback; does not create a project. May take several minutes; progress notifications report elapsed time when supported.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Project title (1-255 characters). | |
| llm_name | No | The name of the LLM model chosen for the project (e.g. CLAUDE_4_5_SONNET). | |
| description | Yes | Project description or design notes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| details | Yes | |
| summary | No | The task as the model read it, from the description and any attached files together. Empty when there was nothing to read beyond the description itself. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=true), so the description earns credit for disclosing latency ('may take several minutes') and progress-notification behavior. It does not state what the feedback contains or that the check is nondeterministic/LLM-backed, which openWorldHint implies but the text never confirms.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the purpose, then the non-mutation guarantee, then the latency caveat. No wasted words, though 'Returns feedback' is slightly vague given an output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return details need not be spelled out, and the description covers the two things an agent most needs: that this is a pass/fail gate rather than a mutation, and that it can run for minutes with progress notifications. It omits any criteria for what 'sufficiently detailed' means, which would help the agent interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so title, llm_name, and description are already documented in the schema. The description adds only that the 'description' text is the thing being evaluated, and says nothing about why title/llm_name are supplied to a check operation, leaving the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and target ('Check whether description text is sufficiently detailed') and immediately scopes it against the sibling it could be confused with ('does not create a project'). An agent can separate it from projects_create and projects_make_description without opening schemas, though the description never names those siblings directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The trigger point is explicit: run this 'before creating a project' as a validation gate. It also clarifies the negative case (it returns feedback, it does not create), but gives no guidance on what to do when the check fails or on alternatives for generating/fixing a weak description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_createProjects CreateCInspect
Create a new project.
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | Project fields to create. |
Output Schema
| Name | Required | Description |
|---|---|---|
| title | Yes | Project title (1-255 characters). |
| can_redo | Yes | True if a redo operation is available. |
| can_undo | Yes | True if an undo operation is available. |
| chosen_llm | No | The name of the LLM model chosen for the project (e.g. CLAUDE_4_5_SONNET). |
| created_at | No | Project creation timestamp (ISO 8601). |
| project_id | Yes | Project UUID (database id). |
| usage_cost | No | Accumulated usage cost as a decimal string. |
| stories_count | Yes | Number of stories in the project. |
| messages_count | Yes | Number of messages in the project history. |
| design_description | No | Project description or design notes. |
| requirements_count | Yes | Number of requirements in the project. |
| extra_requirement_fields | No | List of extra requirement fields. |
| interface_contracts_count | Yes | Number of interface contracts in the project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so safety is partially covered by structured data. However, the description adds nothing beyond that: it does not say what a created project contains, whether extra fields are optional, or what defaults apply to chosen_llm.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with zero waste, but it is under-specified rather than genuinely concise. There is nothing extraneous because there is almost nothing at all.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a mutation tool with a nested required object, an output schema, and several sibling create/import variants, 'Create a new project' is too thin. The output schema excuses explaining return values, but nothing here orients the agent on the required 'title' vs optional fields or on mutation consequences.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the nested 'project' object documents title, chosen_llm, design_description, and extra_requirement_fields thoroughly, so the schema carries the burden. With only one top-level parameter, baseline 3 is appropriate; the description adds no extra parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a clear verb+resource ('Create a new project'), which is better than a pure tautology, but it offers no differentiation from siblings such as projects_import, projects_update, or stories_create. An agent cannot tell from this line why it would pick projects_create over projects_import.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives like projects_import. The only implied usage is the self-evident 'you want a new project', with nothing about the chosen_llm/design_description context that distinguishes this call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_deleteProjects DeleteCDestructiveInspect
Delete a project.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). |
Output Schema
| Name | Required | Description |
|---|---|---|
| deleted | Yes | True when the item was deleted. |
| project_id | Yes | Project UUID (database id). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true and readOnlyHint=false, so the agent knows this is an irreversible-feeling mutation. The description adds nothing beyond that — no statement about permanence, cascading effects on requirements/stories/subsystems, or required permissions. Restating "delete" contributes no behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler. It is efficient, though its brevity shades into under-specification rather than economy — the sentence is short because nothing was explained, not because everything was squeezed in.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and annotations cover the safety profile. But for a destructive, presumably irreversible project deletion, the definition omits cascading impact, permission requirements, and any pointer to recovery tools — meaningful missing context for an agent deciding whether to call it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and there is only one parameter (project_id, a UUID), so the schema fully documents the input. The description adds no format or sourcing detail, which is the expected baseline 3 when the schema does all the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Delete a project" states a specific verb and resource, so the agent immediately knows this removes a project rather than reading or updating one. It does not, however, contrast itself with adjacent siblings like projects_undo, projects_patch, or restore_project_snapshot, which are the tools most likely to be confused with a delete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when deletion is appropriate, whether it can be undone, or that projects_undo / restore_project_snapshot exist as alternatives. For a destructive operation in a toolset full of sibling project mutations, this absence is a real gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_detect_subsystemsProjects Detect SubsystemsAInspect
Propose subsystem additions, changes, deletions, requirement assignments, and optional interface contracts. Create accepted new subsystems before applying their links; Use saved entity UUIDs for their links. Returns a proposal without applying the suggested changes. Review it with the user, then save accepted changes using the existing CRUD tools. May take several minutes; progress notifications report elapsed time when supported.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). | |
| granularity | No | Optional direction for revising the split: more or less. | |
| user_message | No | Optional instructions to guide this AI operation. | |
| generate_interface_contracts | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| justification | Yes | |
| new_subsystems | Yes | |
| changed_subsystems | Yes | |
| interface_contracts | No | |
| requirement2subsystems | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only give the coarse safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=true). The description adds substantive context the annotations cannot: the tool does not apply changes, requires user review, may run for several minutes, and emits progress notifications with elapsed time. It never states whether the proposal is persisted, which leaves a small gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five compact sentences with the core behavior front-loaded. The mid-stream instruction sentence ('Create accepted new subsystems before applying their links') blurs the boundary between what this tool does and what the caller should do next, which slightly muddies an otherwise tight structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return-value detail is unnecessary, and the description still covers side-effect profile, latency, progress reporting, and the apply-vs-propose workflow. For a 4-parameter, annotated, output-described tool, 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, so most parameters are self-documenting and the baseline is 3. The description indirectly references 'optional interface contracts' (mapping to generate_interface_contracts) but adds no meaning for granularity or user_message beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb and resource ('Propose subsystem additions, changes, deletions, requirement assignments, and optional interface contracts') and the fourth sentence clarifies the output is a non-applied proposal. This distinguishes it from CRUD siblings like subsystems_create/subsystems_update, though the word 'Propose' is slightly softer than the tool name 'detect'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It prescribes the follow-up workflow clearly: review the proposal with the user, then apply accepted changes 'using the existing CRUD tools', and create new subsystems before linking them. It gives no explicit when-not-to-use or a named alternative detection tool, but the boundary against the apply-tools is well drawn.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_diffProjects DiffARead-onlyIdempotentInspect
Diff a project between a base snapshot and a compare state (another snapshot id, or 'current' — the default). Returns ADDED/REMOVED/MODIFIED/UNCHANGED buckets for stories, requirements, and interface contracts — the basis for the 'implement only what changed' loop.
| Name | Required | Description | Default |
|---|---|---|---|
| base | Yes | Base snapshot UUID to diff from. | |
| compare | No | Snapshot UUID or 'current'. | |
| project_id | Yes | Project UUID (database id). |
Output Schema
| Name | Required | Description |
|---|---|---|
| base | Yes | Base snapshot UUID. |
| compare | Yes | Snapshot UUID or 'current'. |
| stories | Yes | Diff buckets for one entity collection. |
| requirements | Yes | Diff buckets for one entity collection. |
| interface_contracts | Yes | Diff buckets for one entity collection. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=false, so safety and repeatability are covered. The description adds the default-value behavior and the conceptual output shape, but says nothing beyond the annotations about the return payload detail (an output schema exists anyway) or any constraints. Adequate but modest 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tightly packed sentence front-loads the operation, then the operand options and default, then the output buckets and the motivating use case. Every clause carries information; nothing is padded or redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With annotations covering the safety profile and a full output schema covering the buckets' structure, the description supplies everything needed to call it: required operands, the 'current' default, and the diff semantics. Minor gaps remain around prerequisites (must snapshots already exist?) and any ordering/limit behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all three parameters (base, compare, project_id) are fully documented in the schema, including the 'current' sentinel and UUID formats. The description merely restates base/compare semantics, adding essentially no meaning beyond the structured fields — the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Diff') and resource ('a project') plus the two operands (base snapshot vs. compare state), and enumerates the resulting buckets (ADDED/REMOVED/MODIFIED/UNCHANGED across stories, requirements, interface contracts). No sibling tool overlaps this snapshot-comparison function, so the agent can select it unambiguously.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear use context ('the basis for the implement only what changed loop') and documents the default of compare as 'current'. However, it names no alternative tool and offers no when-not guidance (e.g., when to just call get_project_snapshot instead), so routing is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
project_searchProject SearchARead-onlyIdempotentInspect
Case-insensitive substring search across a project's stories, requirements, stakeholders, subsystems, and interface contracts. Returns natural-sorted matches with a snippet and the matched field.
| Name | Required | Description | Default |
|---|---|---|---|
| kinds | No | Restrict the search to these entity kinds. Any of: story, requirement, stakeholder, subsystem, interface_contract. Omit to search all kinds. | |
| limit | No | Maximum number of matches to return (default 50). | |
| query | Yes | Case-insensitive substring to search for. | |
| project_id | Yes | Project UUID (database id). |
Output Schema
| Name | Required | Description |
|---|---|---|
| matches | Yes | Matches, natural-sorted and grouped by kind. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint=false, so the safety profile is covered. The description adds genuine context beyond that: matching is case-insensitive substring, results are natural-sorted, and each match carries a snippet plus the matched field.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste; the matching semantics and scope are front-loaded, and the return shape follows immediately. Nothing is padded or redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only search tool with a full output schema and 100% parameter coverage, the description is complete enough to select and invoke the tool correctly without explaining return values. It lacks only explicit alternative-routing guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents project_id, query, kinds, and limit in detail. The description's note on case-insensitivity and natural sort adds only marginal meaning over the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (substring search) and resource (a project's stories, requirements, stakeholders, subsystems, interface contracts), enumerating the searchable entity kinds. This implicitly distinguishes it from the many single-kind list tools in the sibling set, which return full entities rather than matches.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the description (cross-entity substring search) and the schema notes you can restrict kinds or omit to search all. However, there is no explicit when-to-use guidance versus alternatives such as stories_list, requirements_list, or stakeholders_list when looking up entities.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_exportProjects ExportARead-onlyIdempotentInspect
Export a project to the portable format projects_import reads. Chat is opt-in; version 4 uses typed file-local links, with pending actions removed. format: yaml returns the same export as a YAML document (with a suggested filename) for committing to a repository; it imports the same way once parsed.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | json (default) returns the export as structured data. yaml returns it as a YAML document, readable in a diff, for committing to a repository. | |
| project_id | Yes | Project UUID (database id). | |
| include_chat_messages | No | Include the project's chat history. Off by default, so a file meant for sharing or a repository carries no transcript. |
Output Schema
| Name | Required | Description |
|---|---|---|
| title | No | |
| format | No | |
| stories | No | |
| document | No | The export, rendered as YAML. |
| filename | No | A suggested file name. |
| chosen_llm | No | The model the project used. A hint: import uses it when this install offers that model, and its default otherwise. |
| subsystems | No | |
| description | No | The project description. Read as design_description in files before schema version 3. |
| requirements | No | |
| stakeholders | No | |
| chat_messages | No | Optional transcript. In version 4, entalpa:<kind>/local/<encoded human_id> links bind only to imported entities of that kind; legacy/unresolved links stay unbound. Pending actions are stripped. Before version 3: messages. |
| open_questions | No | |
| schema_version | No | 4 adds typed file-local chat references remapped to fresh UUIDs on import. Earlier versions remain readable; ordinary document relationships retain human IDs. |
| assessment_score | No | Accepted project completeness assessment, from 0 to 100. |
| assessment_details | No | Accepted explanation of the project assessment. |
| interface_contracts | No | |
| extra_requirement_attributes | No | The requirement attributes this project generates. Absent when the project never chose a list, which is not the same as choosing an empty one: absent shows every content field, [] shows only the core ones. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only and idempotent behavior, but the description adds real context: chat is opt-in, version 4 emits typed file-local links, and pending actions are stripped from the export. These are non-obvious transformation traits an agent cannot derive from annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three front-loaded sentences with no filler, leading with the core purpose and the round-trip relationship. The version-4 internals are slightly dense but every clause conveys actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return-value detail is unnecessary, and annotations cover the safety profile. The description complements these by explaining the chat opt-in default and format consequences, leaving little an agent needs to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters and the enum. The description largely restates the format behavior ("yaml returns the same export as a YAML document ... imports the same way once parsed") rather than adding syntax or semantics beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("Export a project") and identifies the counterpart tool it feeds ("the portable format projects_import reads"). It does not distinguish itself from the sibling exporters projects_export_openspec and projects_export_speckit, which an agent might otherwise pick, but the core purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a use case for the yaml format ("for committing to a repository") and notes round-trip compatibility with projects_import, implying when to reach for it. However, it never states when to choose this over the export_openspec/export_speckit alternatives or the plain JSON default, leaving selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_export_openspecProjects Export OpenspecARead-onlyIdempotentInspect
Write the project out as OpenSpec files: one openspec/specs//spec.md per subsystem plus one for system-level requirements. Returns each file's path and content; write them into the repository to put the current spec back. Uses no AI and no credits.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). |
Output Schema
| Name | Required | Description |
|---|---|---|
| files | Yes | |
| format | Yes | openspec or speckit. |
| warnings | Yes | What to check before committing. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotent/openWorld=false, and the description usefully clarifies that the tool only returns path+content and the caller performs the write, which resolves any 'write out' ambiguity. 'Uses no AI and no credits' is a real cost trait not present in annotations, but no other behavioral detail (sizing, limits) is added.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the output format and no filler. The return-value detail is arguably redundant given the output schema, but it is brief.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only export with an output schema, the description covers format, return shape, and cost. 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single project_id parameter is fully documented there; the description adds no meaning beyond what the schema already provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('write the project out') plus resource ('as OpenSpec files') and even the exact output layout (one spec.md per subsystem plus system-level). The OpenSpec format name implicitly separates it from projects_export_speckit, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'write them into the repository to put the current spec back' implies the use case (persisting a snapshot of the current spec), but there is no explicit when-to-use/when-not guidance and no pointer to projects_export_speckit or projects_import_openspec as alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_export_speckitProjects Export SpeckitARead-onlyIdempotentInspect
Write the project out as one GitHub Spec Kit feature, specs/-current-system/spec.md, holding the whole current system in the spec template's shape. Returns the file's path and content; write it into the repository so /speckit-specify reads it. Uses no AI and no credits.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). |
Output Schema
| Name | Required | Description |
|---|---|---|
| files | Yes | |
| format | Yes | openspec or speckit. |
| warnings | Yes | What to check before committing. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and closed-world, so the safety profile is covered. The description adds value beyond that by disclosing that the operation uses no AI and consumes no credits, and that it returns both path and content. It could still clarify that the tool itself does not persist anything to the repository (the caller does), which would remove residual ambiguity around 'Write the project out'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the verb and the concrete output path, and no filler. The phrase 'Write the project out' is slightly ambiguous against the read-only nature of the tool, costing a bit of precision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return-value explanation is not required, yet the description still summarizes the return (path and content). Combined with annotations and a single fully documented parameter, the definition is nearly complete; only the tool-vs-caller write responsibility could be stated more explicitly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter with 100% schema description coverage, so the schema fully documents project_id. The description adds no extra meaning about the identifier or its scope, which is the expected baseline when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action and artifact: it writes the project out as one GitHub Spec Kit feature at a concrete path (specs/<NNN>-current-system/spec.md). It implicitly separates itself from siblings like projects_export_openspec and projects_import_speckit by naming the Spec Kit format and direction of flow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the intended downstream consumer explicitly ('write it into the repository so /speckit-specify reads it'), which tells the agent exactly when this output is useful. It does not, however, compare against projects_export or projects_export_openspec, so the choice among export variants 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.
projects_fold_speckit_featuresProjects Fold Speckit FeaturesAInspect
After projects_import_speckit: fold the imported Spec Kit features into one backlog, oldest first. Later features revise the stories they change instead of adding copies, requirements are linked to their stories, engineering-only features are left out, and possible replacements become open questions. Uses AI, spends credits, and saves each feature as it is folded; run again to resume.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). | |
| max_features | No | Fold at most this many features now (1 to 300); the rest on the next call. |
Output Schema
| Name | Required | Description |
|---|---|---|
| features | Yes | |
| remaining | Yes | Features not folded yet. |
| stakeholders_created | No | Stakeholders added from the actors of the folded stories. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare only safety hints (readOnly=false, destructive=false, openWorld=true). The description adds substantial behavioral detail beyond them: it uses AI, spends credits, incrementally saves each folded feature, and encodes the folding rules (revise vs. copy, requirement-to-story linking, exclusion of engineering-only features, replacements becoming open questions).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The trigger condition is front-loaded and the three sentences are dense but purposeful, with no filler. Some grammatical density makes it slightly harder to scan, but every clause carries semantics.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an AI-driven, credit-spending, resumable batch operation, it covers prerequisite, incremental persistence, side effects, and processing rules. An output schema exists, so return values need not be explained; nothing critical for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both project_id and max_features are already documented in the schema. The description does not elaborate on parameter formats or defaults, so the 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'fold the imported Spec Kit features into one backlog, oldest first.' It names the prerequisite sibling (projects_import_speckit) and describes the transformation outcome, so an agent can distinguish it from import/update siblings at a glance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear sequencing context ('After projects_import_speckit') and rerun guidance ('run again to resume'), telling the agent when the tool is applicable. It does not explicitly name when-not or an alternative for folding, but the trigger condition is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_generateProjects GenerateAInspect
Generate requirement suggestions and revisions, preserving locked requirements. Returns a proposal without applying it, and saves it for review: saved_suggestions lists the saved items' ids, and its review_url opens them in the Entalpa app. Apply the items the user accepts by passing their ids to suggestions_accept, and decline the rest with suggestions_reject. Do not recreate accepted items with the CRUD tools: the saved suggestions would stay pending, to be applied twice. Running this tool again only proposes again, replacing what it saved for the same targets; it applies nothing. Without saved_suggestions, look for the items with suggestions_list, and only when they are not there, create the accepted items with the CRUD tools. May take several minutes; progress notifications report elapsed time when supported.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). | |
| max_attempts | No | Maximum generation attempts, 1 to 3. Defaults to 2. | |
| subsystem_id | No | Subsystem UUID (database id). | |
| user_message | No | Optional instructions to guide this AI operation. | |
| creative_mode | No | Use the creative prompt, which also fills the gaps the stories and description leave (edge cases, failure handling, security, performance, assumed limits), stating in each such requirement's rationale that it is an assumption. Default false: requirements state what the sources state, and a missing value is left to be agreed. | |
| extra_requirement_attributes | No | List of extra requirement fields. |
Output Schema
| Name | Required | Description |
|---|---|---|
| saved_suggestions | No | What this run saved for review. Apply the items the user accepts by passing their ids to suggestions_accept, and decline the rest with suggestions_reject. review_url opens them in the Entalpa app. |
| requirement_updates | Yes | |
| new_requirements_suggestions | Yes | |
| justification_new_requirements | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations, which only state readOnlyHint=false, openWorldHint=true, destructiveHint=false. It discloses that the tool saves proposals without applying them, that re-running replaces prior saved work for the same targets, the double-apply risk, and multi-minute latency with progress notifications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and the non-applying scope before branching into routing. Dense but nearly every sentence carries necessary operational guidance; minor length inflation from the fallback sequence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an async, side-effectful generation tool with an output schema and annotations, the description supplies the missing lifecycle context: proposal persistence, idempotency/replacement behavior, review URL, and latency. Nothing an agent needs to call it correctly is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so every parameter including creative_mode and max_attempts is already documented. The description adds no extra syntax or format guidance for the parameters, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: generate requirement suggestions and revisions, preserving locked requirements. The proposal-without-applying scope plus the named sibling tools (suggestions_accept, suggestions_reject, suggestions_list, CRUD tools) make the function unmistakable against its many siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use and when-not-to-use: apply accepted items via suggestions_accept, decline via suggestions_reject, never recreate accepted items with CRUD tools, and fall back to suggestions_list only when saved_suggestions is absent. Routing and exclusions are spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_getProjects GetBRead-onlyIdempotentInspect
Get a project by id.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). |
Output Schema
| Name | Required | Description |
|---|---|---|
| title | Yes | Project title (1-255 characters). |
| can_redo | Yes | True if a redo operation is available. |
| can_undo | Yes | True if an undo operation is available. |
| chosen_llm | No | The name of the LLM model chosen for the project (e.g. CLAUDE_4_5_SONNET). |
| created_at | No | Project creation timestamp (ISO 8601). |
| project_id | Yes | Project UUID (database id). |
| usage_cost | No | Accumulated usage cost as a decimal string. |
| stories_count | Yes | Number of stories in the project. |
| messages_count | Yes | Number of messages in the project history. |
| design_description | No | Project description or design notes. |
| requirements_count | Yes | Number of requirements in the project. |
| extra_requirement_fields | No | List of extra requirement fields. |
| interface_contracts_count | Yes | Number of interface contracts in the project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=false, so the safety and repeatability profile is fully covered by structured data. The description adds nothing beyond that profile — no behavior on a missing/unknown id, no indication of what the caller state must be to read it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; every word earns its place. It is minimal rather than padded, though the extreme brevity borders on under-specification for the surrounding toolset.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and the one required parameter is fully documented in the schema. Annotations handle the safety profile, leaving only edge-case behavior (unknown id, permission requirements) unaddressed — a minor gap for a simple getter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the sole parameter's UUID format is documented in the schema, so the baseline of 3 applies. The description's 'by id' merely restates the parameter without adding format, sourcing, or constraint detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get') and resource ('a project') and pins the lookup key ('by id'), so the agent knows exactly what the call fetches. It never differentiates from nearby siblings such as projects_list, projects_overview, or projects_get_assessment, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance at all: nothing tells the agent to prefer this over projects_list when it already has an id, or over projects_overview when it wants a summarized view. The single sentence only describes the operation, leaving selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_get_assessmentProjects Get AssessmentCRead-onlyIdempotentInspect
Get assessment details for a project.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). |
Output Schema
| Name | Required | Description |
|---|---|---|
| project_id | Yes | Project UUID (database id). |
| assessment_score | No | Latest LLM assessment score, if available. |
| assessment_details | No | Explanation for assessment score, if available. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds essentially nothing beyond 'get details' – no note on what an assessment contains or what happens when none exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with zero filler. Appropriately sized, though it is arguably too terse to be informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, and annotations cover safety. However, for a tool embedded among dozens of near-identical project siblings, the description does not supply enough to make selection unambiguous.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single project_id parameter is fully documented as a UUID. The description adds no parameter meaning beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb (get) and resource (assessment) scoped to a project, but is thin on specificity. It does not distinguish itself from sibling projects_get, projects_assess, or projects_overview, so an agent cannot easily tell which to call.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus the many similar siblings (projects_get, projects_assess, projects_overview). No exclusions or prerequisites are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_get_messagesProjects Get MessagesBRead-onlyIdempotentInspect
Get message history for a project.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). |
Output Schema
| Name | Required | Description |
|---|---|---|
| messages | Yes | Project message history. |
| project_id | Yes | Project UUID (database id). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false and idempotentHint=true, so the safe-read profile is covered. The description adds essentially nothing behavioral beyond that – no pagination, ordering, or volume disclosure, which matters for a history-listing tool. With annotations carrying the safety burden, this is a modest 3.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single lean sentence with no filler and the subject front-loaded. It is not padded, though it is so terse it sacrifices useful context for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values needn't be explained, but for a history-retrieval tool the description omits ordering, time scope, pagination, and what a 'message' even is. Against a very crowded sibling namespace, this is too thin to guide correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single project_id param is fully documented in the schema, so baseline 3 applies. The description adds no format or constraint detail beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get') and resource ('message history') scoped to a project, which is clearer than the sibling 'projects_get'. However, among dozens of project-scoped siblings it doesn't differentiate itself beyond name, and 'message history' scope (what messages, from where) is left unstated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no reference to alternatives. Given the crowded sibling set (projects_get, projects_overview, projects_list), an agent gets no routing help about when message history is the right call versus other project reads.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_importProjects ImportAInspect
Import a project from the portable format projects_export writes. Version 4 chat links bind to fresh imported UUIDs; pending actions are discarded. Files from earlier schema versions import too; legacy chat links stay unbound.
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| title | Yes | Project title (1-255 characters). |
| can_redo | Yes | True if a redo operation is available. |
| can_undo | Yes | True if an undo operation is available. |
| chosen_llm | No | The name of the LLM model chosen for the project (e.g. CLAUDE_4_5_SONNET). |
| created_at | No | Project creation timestamp (ISO 8601). |
| project_id | Yes | Project UUID (database id). |
| usage_cost | No | Accumulated usage cost as a decimal string. |
| stories_count | Yes | Number of stories in the project. |
| messages_count | Yes | Number of messages in the project history. |
| unresolved_links | Yes | Unbound document links. entity_id is a file-local label, or the zero-based transcript row for chat_message; missing_id is the unresolved reference. |
| design_description | No | Project description or design notes. |
| requirements_count | Yes | Number of requirements in the project. |
| extra_requirement_fields | No | List of extra requirement fields. |
| interface_contracts_count | Yes | Number of interface contracts in the project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare a non-readonly, non-destructive mutation, and the description adds real behavioral detail beyond that: pending actions are discarded, version-4 chat links rebind to fresh UUIDs, and legacy/unresolved links stay unbound. It does not disclose overwrite/duplicate-name behavior or id-remapping consequences for ordinary documents.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences with no filler and the core purpose front-loaded, followed by version-compatibility specifics. Each sentence carries information, though the third sentence overlaps somewhat with the chat-link clause of the second.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and annotations cover the mutation/safety profile, so the description need not explain return values. Coverage of version compatibility, chat-link rebinding, and discarded pending actions makes it largely sufficient, with only conflict/overwrite behavior at import time left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single `data` parameter has no top-level schema description (0% coverage), so the description must carry it, and it only says the payload comes from the projects_export portable format. The nested schema does document field semantics richly, but the description adds little about the top-level document shape or required fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('Import a project') and anchors it to a named counterpart format written by projects_export, which an agent can map directly. It distinguishes the tool from the format-specific siblings only implicitly (portable projects_export format vs. the openspec/speckit importers), so sibling differentiation is not fully explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: 'the portable format projects_export writes' tells the agent this is the counterpart to export, but there is no when-to-use/when-not-to-use guidance and no routing toward projects_import_openspec or projects_import_speckit for other formats.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_import_openspecProjects Import OpenspecAInspect
Create a project from a public GitHub repository that uses OpenSpec. Each spec domain becomes a subsystem and each requirement a requirement, with its scenarios as acceptance criteria. Uses no AI and no credits; stakeholders and stories are not generated.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | A public GitHub repository with an openspec/ folder: the repository URL, owner/repo, or a /tree/<branch>/<dir> link. |
Output Schema
| Name | Required | Description |
|---|---|---|
| repo | Yes | The repository imported, as owner/repo. |
| message | No | What was left out and how to get the rest, when truncated. |
| project | Yes | Project list fields (messages omitted). |
| truncated | Yes | True when the repository had more requirements than one import takes. |
| subsystems | Yes | Subsystems created, one per OpenSpec domain. |
| requirements_found | Yes | Requirements in the repository. |
| requirements_imported | Yes | Requirements imported; fewer than found only when the import cap was reached. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover readOnly/destructive/openWorld flags; the description adds genuinely useful behavior the agent cannot get elsewhere: no AI, no credits consumed, and a documented gap (no stakeholders or stories generated). It does not describe failure modes (e.g., repo without an openspec/ folder).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and source, then the mapping semantics, then the constraints. No redundant restatement of the name or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. The description covers what the tool creates and explicitly what it omits; the only minor gap is error/precondition behavior when the target repo lacks an openspec/ folder.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single url parameter is fully documented in the schema, including accepted URL formats. The description adds no parameter-level detail beyond what the schema already says, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (Create) plus resource (project) and the precise source kind (public GitHub repo using OpenSpec). It further states the mapping model (spec domain → subsystem, requirement → requirement, scenarios → acceptance criteria), which cleanly separates it from projects_import_speckit and projects_import.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It scopes usage implicitly via 'Uses no AI and no credits; stakeholders and stories are not generated', telling the agent when not to pick it (if stories/stakeholders are needed), but it never names the alternative sibling tools (projects_import_speckit, projects_import) explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_import_speckitProjects Import SpeckitAInspect
Create a project from a public GitHub repository that uses GitHub Spec Kit (specs//spec.md). Every user story and FR-/SC- requirement comes in as written, clarifications as answered questions, and statuses from tasks.md. Uses no AI and no credits; folding the features into one backlog is a separate step.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | A public GitHub repository that uses GitHub Spec Kit (specs/<feature>/spec.md): the repository URL, owner/repo, or a /tree/<branch>/<dir> link. |
Output Schema
| Name | Required | Description |
|---|---|---|
| repo | Yes | The repository imported, as owner/repo. |
| message | No | What was left out and how to get the rest, when truncated. |
| project | Yes | Project list fields (messages omitted). |
| stories | Yes | User stories imported, one per story in a feature spec, before folding. |
| features | Yes | Spec Kit features imported (specs/<feature>/ folders). |
| truncated | Yes | True when the repository had more requirements than one import takes; the newest features are kept. |
| open_questions | Yes | [NEEDS CLARIFICATION] markers, imported as open questions. |
| answered_questions | Yes | Clarifications from the specs, imported as answered questions. |
| requirements_found | Yes | FR- and SC- requirements in the repository. |
| statuses_from_tasks | Yes | Requirements whose status was taken from the feature's tasks.md. |
| requirements_imported | Yes | Requirements imported; fewer than found only when the import cap was reached. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish write/non-destructive/non-open-world, and the description adds genuinely non-obvious behavior: it uses no AI and no credits, and it discloses exactly how content maps (stories and requirements verbatim, clarifications as answered questions, statuses from tasks.md). It does not state permissions or whether an existing project is overwritten.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, verb-first and front-loaded, with dense but relevant detail about the mapping and the separate folding step. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and annotations cover the safety profile. The description supplies the format constraint, the transformation behavior, the no-AI/no-credit trait, and the follow-up step, leaving nothing an agent needs to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single url parameter is fully documented in the schema, including accepted forms (URL, owner/repo, /tree/ link). The description only restates the 'public GitHub repository' constraint, adding little beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Create) and resource (a project) with the precise input format (public GitHub repo using Spec Kit specs/<feature>/spec.md). This clearly separates it from the OpenSpec and plain-import siblings, though it does not name those alternatives explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies the correct context (import now, fold features into one backlog separately) and names the follow-up step, but never states when to choose this over projects_import or projects_import_openspec, nor does it give prerequisites beyond 'public' repo.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_listProjects ListBRead-onlyIdempotentInspect
List projects for the current user.
| Name | Required | Description | Default |
|---|---|---|---|
| skip | No | Number of items to skip (offset). | |
| limit | No | Maximum number of items to return. |
Output Schema
| Name | Required | Description |
|---|---|---|
| projects | Yes | Projects owned by the current user. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=false, so the safety profile is covered. The description adds the 'current user' scoping constraint, which is useful, but says nothing about pagination defaults, ordering, or result volume. With annotations carrying the safety burden and an output schema present, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no redundancy or filler. It is front-loaded and readable, though it is arguably under-specified rather than perfectly calibrated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema covers return values and the annotations cover safety and idempotency, so the largest burdens are lifted. However, given a wide sibling set with several overlapping list/search tools, the description is too thin to route an agent confidently and omits pagination behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters (skip, limit) are documented directly in the schema. The description adds no syntax, default, or maximum-value detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (projects) with a scoping qualifier ('for the current user'). It does not distinguish itself from sibling list-like tools such as project_search, projects_overview, or projects_get, so an agent cannot tell from the description alone when this is the right call versus those.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no exclusions, and no mention of alternatives among a very crowded sibling set (project_search, projects_overview, projects_get_many patterns). The agent must infer context from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_list_snapshotsProjects List SnapshotsARead-onlyIdempotentInspect
List saved snapshots for a project (most recent first). Use a snapshot id as the base for projects_diff.
| Name | Required | Description | Default |
|---|---|---|---|
| skip | No | Number of snapshots to skip (offset). | |
| limit | No | Maximum number of snapshots to return. | |
| project_id | Yes | Project UUID (database id). |
Output Schema
| Name | Required | Description |
|---|---|---|
| snapshots | Yes | Snapshots for the project, most recent first. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint=false, so the safety profile is covered. The description adds only the sort order ('most recent first'), which is mild extra context, but says nothing about pagination defaults or result shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero padding; the core purpose and ordering lead, and the downstream hint follows. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and pagination is covered by the schema. The description supplies scope, ordering and the follow-on tool, leaving only sibling disambiguation as a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (skip, limit, project_id all documented in the schema), so the baseline is 3. The description restates only the project scoping and adds no format or default details beyond what the schema already carries.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List saved snapshots for a project') plus the ordering guarantee (most recent first), which an agent cannot infer from the name alone. It does not explicitly distinguish itself from the sibling get_project_snapshot, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives one forward-looking usage hint ('Use a snapshot id as the base for projects_diff'), which is genuine guidance. However, it never says when to pick this over get_project_snapshot, nor any prerequisite like needing an existing project, so guidance remains implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_make_descriptionProjects Make DescriptionAInspect
Draft a project description for the supplied stakeholder. Save accepted text with projects_patch using design_description. Returns a proposal without applying the suggested changes. Review it with the user, then save accepted changes using the existing CRUD tools. May take several minutes; progress notifications report elapsed time when supported.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). | |
| stakeholder | Yes | Stakeholder name or role to address in the description. | |
| user_message | No | Optional instructions to guide this AI operation. | |
| extra_requirement_attributes | No | List of extra requirement fields. |
Output Schema
| Name | Required | Description |
|---|---|---|
| description | Yes | Project description or design notes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real behavioral context beyond the annotations: the result is a non-applied proposal, saving happens through a separate tool, and the call can take several minutes with progress notifications. There is mild tension with readOnlyHint=false (the tool may persist generated content), but the description never claims pure read-only behavior, so it is not 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then the persistence guidance, then the latency caveat. Five short sentences, all earning their place, though the saving workflow could be tightened slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be described, and the description covers the action, the non-applied nature of the result, the save path, and latency. Complete enough to invoke correctly, with only the sibling-routing guidance left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; every parameter including stakeholder, user_message, and extra_requirement_attributes is already documented in the schema. The description names the design_description field used for saving, but adds no syntax or format detail beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Draft a project description') and immediately clarifies the output is a proposal rather than an applied change, which separates it from siblings like projects_check_description (validates) and projects_make_stories_from_description (derives stories). An agent can identify what this produces without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete usage flow: draft, review with the user, then persist accepted text via projects_patch with design_description. It names the save path and the review step, but never states when NOT to use it or how it differs from adjacent generators such as projects_specify_design or projects_generate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_make_stories_from_descriptionProjects Make Stories From DescriptionAInspect
Draft stakeholders and their stories from the project description. Returns a proposal without applying the suggested changes. Review it with the user, then save accepted changes using the existing CRUD tools. May take several minutes; progress notifications report elapsed time when supported.
| Name | Required | Description | Default |
|---|---|---|---|
| llm_name | No | The name of the LLM model chosen for the project (e.g. CLAUDE_4_5_SONNET). | |
| project_id | Yes | Project UUID (database id). | |
| user_message | No | Optional instructions to guide this AI operation. |
Output Schema
| Name | Required | Description |
|---|---|---|
| stakeholders_with_stories | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnlyHint=false, openWorldHint=true, destructiveHint=false. The description goes well beyond that: it discloses that no changes are applied (proposal-only), that changes must be committed separately, and that the call may take several minutes with progress notifications. Those are exactly the behavioral traits 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with what is produced, followed by the workflow constraint and the latency caveat. 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. Given the AI-generation workflow, the description supplies everything else an agent needs: the input basis, the proposal-not-commit semantics, the review step, the follow-up tools, and the long-running behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so project_id, llm_name, and user_message are already documented individually, including the LLM enum example. The description references the project description as the source but adds no format, default, or interaction detail for any parameter, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Draft') and specific resources ('stakeholders and their stories') plus the input source ('from the project description'). This cleanly separates it from sibling generation/alignment tools such as projects_align_stakeholders_to_stories or projects_make_description 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly defines when and how to use it: it returns a proposal, the agent must review it with the user, and accepted changes are saved with the existing CRUD tools. This routes the agent to the correct follow-up siblings (stakeholders_create, stories_create) and states the non-application constraint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_overviewProjects OverviewARead-onlyIdempotentInspect
Where a project stands, in one read: counts of stakeholders, stories, requirements (per category and lifecycle status), subsystems and open questions; the gaps that need attention, each with a few ids to start from; the one suggested next step; and the credits AI work on it has used. Read it first when starting work on a project. Uses no AI and no credits.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). |
Output Schema
| Name | Required | Description |
|---|---|---|
| gaps | Yes | What needs attention, most important first. |
| title | Yes | |
| usage | Yes | Credits AI work on this project has used. |
| counts | Yes | Requirements count excludes rejected and superseded ones. |
| lifecycle | Yes | Requirements per lifecycle status, every status listed. |
| next_step | Yes | The one suggested next step. |
| questions | Yes | |
| imported_from | No | |
| has_description | Yes | |
| assessment_score | Yes | |
| requirement_categories | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/non-open-world safety, so the bar is lower. The description adds genuinely useful context beyond them: "Uses no AI and no credits," which matters for cost-sensitive agent planning. The credits/AI-usage mention also signals the payload contains billing-relevant data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the payoff first; the long enumeration is dense but each item earns its place by describing the payload. The trailing "Read it first" and "Uses no AI and no credits" sentences are short and high-value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value detail is not the description's burden, and annotations cover the safety profile. Combined with the usage cue and cost disclosure, the definition is essentially complete for a single-parameter aggregate reader.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a single documented project_id (UUID). The description adds no syntax or format detail beyond the schema, so the baseline of 3 for a fully-documented parameter set is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise aggregate read: counts of stakeholders, stories, requirements (by category and lifecycle status), subsystems, open questions, gaps, one suggested next step, and credits used. This composite nature clearly distinguishes it from siblings like projects_get, projects_assess, or projects_analyze. An agent can tell what it returns without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Read it first when starting work on a project" gives explicit when-to-use guidance, which is valuable given the many sibling read tools. It does not, however, name a when-not condition or a specific alternative for narrower queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_patchProjects PatchCInspect
Patch a project.
| Name | Required | Description | Default |
|---|---|---|---|
| patch | Yes | Fields to patch on the project. | |
| project_id | Yes | Project UUID (database id). |
Output Schema
| Name | Required | Description |
|---|---|---|
| title | Yes | Project title (1-255 characters). |
| can_redo | Yes | True if a redo operation is available. |
| can_undo | Yes | True if an undo operation is available. |
| chosen_llm | No | The name of the LLM model chosen for the project (e.g. CLAUDE_4_5_SONNET). |
| created_at | No | Project creation timestamp (ISO 8601). |
| project_id | Yes | Project UUID (database id). |
| usage_cost | No | Accumulated usage cost as a decimal string. |
| stories_count | Yes | Number of stories in the project. |
| messages_count | Yes | Number of messages in the project history. |
| design_description | No | Project description or design notes. |
| requirements_count | Yes | Number of requirements in the project. |
| extra_requirement_fields | No | List of extra requirement fields. |
| interface_contracts_count | Yes | Number of interface contracts in the project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the safety profile is covered. The description adds nothing beyond them: it does not disclose that this is a merge-style partial update, that omitted fields remain unchanged (that fact lives only in the schema description), or what side effects a patch may trigger. With annotations carrying the baseline, the description still contributes no extra behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
While extremely short, this is under-specification rather than conciseness. For a tool that partially mutates a nested project structure, two words are not an appropriately sized explanation, and nothing is front-loaded because there is nothing to front-load.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool takes a nested patch object with seven possible fields plus a UUID, has an output schema (so return values need not be described), and has no annotation-based behavioral detail. Given that complexity, the description is materially incomplete: it omits patch semantics, prerequisites, and any warning about destructive-ish overwrites of arrays such as messages.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the nested patch object documents every field (title, messages, chosen_llm, assessment_score, etc.) plus the "omit fields to leave unchanged" semantics. Per the rubric this establishes a baseline of 3; the description adds no syntax, format, or constraint detail on top of the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Patch a project" gives a specific verb (patch) and resource (project), so the basic operation is identifiable. However, it does nothing to distinguish this from siblings like projects_update or requirements_patch, and it never states what a "patch" means semantically here (partial merge vs. full replace). Minimum viable but not differentiating.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of when to prefer projects_update instead, and no preconditions such as required permissions or project state. The design decision of patch-vs-update is left entirely to the agent to infer from sibling names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_propagate_requirements_to_subsystemsProjects Propagate Requirements To SubsystemsAInspect
Propagate selected system requirements by UUID into requirements for existing subsystems, with parent links. Returns a proposal without applying the suggested changes. Review it with the user, then save accepted changes using the existing CRUD tools. May take several minutes; progress notifications report elapsed time when supported.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). | |
| max_attempts | No | Maximum generation attempts, 1 to 3. Defaults to 2. | |
| user_message | No | Optional instructions to guide this AI operation. | |
| chosen_reqs_ids | Yes | Requirement UUIDs. | |
| extra_requirement_attributes | No | List of extra requirement fields. |
Output Schema
| Name | Required | Description |
|---|---|---|
| system_requirement_links | Yes | |
| new_subsystem_requirements | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only give readOnlyHint=false, destructiveHint=false and openWorldHint=true. The description adds the crucial behavioral facts those annotations cannot convey: the call is generative but non-committing (a proposal is returned), the agent must get user review before persisting, persistence happens via separate CRUD tools, and the call can run for minutes with progress notifications. Nothing here contradicts the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, no redundancy, and the core action is front-loaded before the workflow and performance caveats. Every sentence carries distinct information (what it does, what it returns, what to do next, how long it takes).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value detail is unnecessary, and the description still supplies the two things an agent most needs beyond schema: that no changes are applied and how to commit accepted results. Combined with the latency note, an agent can plan the whole interaction correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters (project_id, chosen_reqs_ids, max_attempts, user_message, extra_requirement_attributes) are already documented. The description only glosses 'by UUID' and 'parent links' and adds no syntax or semantics for max_attempts, user_message, or extra_requirement_attributes, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb ('Propagate'), the source resource ('selected system requirements by UUID'), the target ('requirements for existing subsystems') and the mechanism ('with parent links'). This is instantly distinguishable from close siblings like projects_propagate_stories or projects_align_requirements_to_stories 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent the tool does NOT apply anything ('Returns a proposal without applying the suggested changes'), prescribes the follow-up workflow ('Review it with the user, then save accepted changes using the existing CRUD tools'), and sets a latency expectation ('May take several minutes'). This is when/when-not/alternative routing in one compact block.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_propagate_storiesProjects Propagate StoriesAInspect
Propagate selected stories by UUID into system requirements and optional subsystem requirements, with traceability links. Returns a proposal without applying it, and saves it for review: saved_suggestions lists the saved items' ids, and its review_url opens them in the Entalpa app. Apply the items the user accepts by passing their ids to suggestions_accept, and decline the rest with suggestions_reject. Do not recreate accepted items with the CRUD tools: the saved suggestions would stay pending, to be applied twice. Running this tool again only proposes again, replacing what it saved for the same targets; it applies nothing. Without saved_suggestions, look for the items with suggestions_list, and only when they are not there, create the accepted items with the CRUD tools. May take several minutes; progress notifications report elapsed time when supported.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). | |
| max_attempts | No | Maximum generation attempts, 1 to 3. Defaults to 2. | |
| user_message | No | Optional instructions to guide this AI operation. | |
| chosen_story_ids | Yes | Story UUIDs. | |
| propagate_to_subsystems | No | ||
| extra_requirement_attributes | No | List of extra requirement fields. |
Output Schema
| Name | Required | Description |
|---|---|---|
| saved_suggestions | No | What this run saved for review. Apply the items the user accepts by passing their ids to suggestions_accept, and decline the rest with suggestions_reject. review_url opens them in the Entalpa app. |
| revised_requirements | No | Requirements of the propagated stories written from an earlier text of them (suspect links), each kept, rewritten or dropped for the story as it reads now. Saved as suggestions with the rest; nothing is applied. |
| new_system_requirements | Yes | |
| story_requirement_links | Yes | |
| system_requirement_links | Yes | |
| new_subsystem_requirements | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true. The description adds substantial non-obvious behavior: it returns a proposal without applying anything, persists it for review with ids and a review_url, that re-running replaces the saved proposal for the same targets, the double-application pitfall, and that it may take several minutes with progress notifications. This goes well beyond what the annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, and every subsequent sentence carries routing or behavioral payload rather than filler. It is dense and fairly long, but the length is justified by the multi-step accept/reject/fallback workflow it must convey; no sentence is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be re-explained, and the description still names the key returned fields (saved_suggestions, review_url). Combined with the full workflow guidance and duration/notification disclosure, nothing an agent needs 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 83%, so the schema already documents project_id, chosen_story_ids, max_attempts, user_message, and extra_requirement_attributes. The description only implies 'stories by UUID' and 'optional subsystem requirements' (mapping loosely to propagate_to_subsystems), adding marginal meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (propagate), the resource acted on (selected stories by UUID), and the destination (system requirements plus optional subsystem requirements with traceability links). This clearly distinguishes it from the similarly named sibling projects_propagate_requirements_to_subsystems, which propagates in the opposite direction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent through the whole workflow: apply accepted items via suggestions_accept, decline with suggestions_reject, do not recreate accepted items with CRUD tools, fall back to suggestions_list and only then CRUD tools if saved_suggestions is absent. It also states the consequence of re-running (re-proposes and replaces, applies nothing). This is exhaustive 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.
projects_redoProjects RedoAInspect
Redo last undone project change.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). |
Output Schema
| Name | Required | Description |
|---|---|---|
| title | Yes | Project title (1-255 characters). |
| can_redo | Yes | True if a redo operation is available. |
| can_undo | Yes | True if an undo operation is available. |
| chosen_llm | No | The name of the LLM model chosen for the project (e.g. CLAUDE_4_5_SONNET). |
| created_at | No | Project creation timestamp (ISO 8601). |
| project_id | Yes | Project UUID (database id). |
| usage_cost | No | Accumulated usage cost as a decimal string. |
| stories_count | Yes | Number of stories in the project. |
| messages_count | Yes | Number of messages in the project history. |
| design_description | No | Project description or design notes. |
| requirements_count | Yes | Number of requirements in the project. |
| extra_requirement_fields | No | List of extra requirement fields. |
| interface_contracts_count | Yes | Number of interface contracts in the project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false (a mutation) and destructiveHint=false, so the safety profile is covered. The description scopes the effect to 'the last undone change', adding some useful context, but says nothing about what happens when there is no undo history or whether the redo is itself reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence, front-loaded with the verb and scoped to the specific target. Nothing extraneous.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter mutation tool with full schema coverage and an output schema (so return values need no explanation), the description is close to complete. It could mention the precondition of an existing undo state, but the core is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With a single parameter at 100% schema coverage, the schema fully documents project_id as a Project UUID. The description adds no meaning beyond it, which is the expected baseline when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (redo) and resource (last undone project change), which is immediately distinguishable from the sibling projects_undo. It does not explicitly name projects_undo as the inverse, but the phrasing leaves little ambiguity about the operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'last undone change' implies the usage context (this follows an undo), but the description never states when to use this versus projects_undo, nor any precondition such as an existing undo history. Usage is inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_specify_designProjects Specify DesignAInspect
Draft design specifications linked to system requirements. Returns a proposal without applying the suggested changes. Review it with the user, then save accepted changes using the existing CRUD tools. May take several minutes; progress notifications report elapsed time when supported.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). | |
| user_message | No | Optional instructions to guide this AI operation. | |
| extra_requirement_attributes | No | List of extra requirement fields. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false, openWorldHint=true. The description adds crucial behavioral context: it returns a proposal without applying changes, and may take several minutes with progress notifications. This is valuable information beyond what annotations provide. However, it doesn't detail what the proposal contains or error scenarios.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: what it does, how to use the result, and the performance characteristic. Front-loaded with the core purpose, then workflow guidance, then operational note. No waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for this tool's complexity. The output schema exists (so return values don't need explanation), annotations cover the safety profile, and the description adds the critical workflow context (proposal-only, review-then-save) and performance expectation. An agent has everything needed to invoke and handle this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 3 parameters are documented in the schema. The description mentions linking to system requirements but doesn't add meaning beyond the schema's parameter documentation. Baseline 3 applies when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource combination ('Draft design specifications linked to system requirements') that distinguishes it from siblings like projects_make_stories_from_description or projects_align_requirements_to_stories. The description clearly communicates the drafting/proposal nature of the operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the workflow: this returns a proposal, the user should review it, and accepted changes should be saved using existing CRUD tools. This clearly routes the agent to the correct sequence of operations and names the alternative pathway (CRUD tools for persistence).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_undoProjects UndoCInspect
Undo last project change.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). |
Output Schema
| Name | Required | Description |
|---|---|---|
| title | Yes | Project title (1-255 characters). |
| can_redo | Yes | True if a redo operation is available. |
| can_undo | Yes | True if an undo operation is available. |
| chosen_llm | No | The name of the LLM model chosen for the project (e.g. CLAUDE_4_5_SONNET). |
| created_at | No | Project creation timestamp (ISO 8601). |
| project_id | Yes | Project UUID (database id). |
| usage_cost | No | Accumulated usage cost as a decimal string. |
| stories_count | Yes | Number of stories in the project. |
| messages_count | Yes | Number of messages in the project history. |
| design_description | No | Project description or design notes. |
| requirements_count | Yes | Number of requirements in the project. |
| extra_requirement_fields | No | List of extra requirement fields. |
| interface_contracts_count | Yes | Number of interface contracts in the project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, non-destructive, closed-world operation, and the description adds nothing beyond that. For a mutation tool it fails to say whether the undo is itself undoable via redo, whose last change is undone, or whether the history is per-project — all behaviorally important.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler or repetition, which is structurally efficient. Its brevity is nearly under-specification, but as a conciseness measure it is sound.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation. However, for a mutation tool with redo/snapshot siblings, the description omits the undo scope, preconditions, and reversibility, leaving material gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single project_id parameter is fully documented as a Project UUID, so the schema carries the semantics. The description adds no scope detail (e.g., which change history is keyed by that ID), matching the baseline-3 case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (undo) and resource (last project change), identifying the operation clearly. It doesn't name the obvious counterpart projects_redo or clarify whether the undo is scoped to the project or the caller's own last action, so sibling differentiation is only implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance at all: nothing explains how this differs from projects_redo, projects_patch, or restore_project_snapshot, nor what precondition (an existing change history) must hold. The agent must infer the usage context from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_updateProjects UpdateCInspect
Update a project.
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | Fields to update on the project. title is required for PUT updates. | |
| project_id | Yes | Project UUID (database id). |
Output Schema
| Name | Required | Description |
|---|---|---|
| title | Yes | Project title (1-255 characters). |
| can_redo | Yes | True if a redo operation is available. |
| can_undo | Yes | True if an undo operation is available. |
| chosen_llm | No | The name of the LLM model chosen for the project (e.g. CLAUDE_4_5_SONNET). |
| created_at | No | Project creation timestamp (ISO 8601). |
| project_id | Yes | Project UUID (database id). |
| usage_cost | No | Accumulated usage cost as a decimal string. |
| stories_count | Yes | Number of stories in the project. |
| messages_count | Yes | Number of messages in the project history. |
| design_description | No | Project description or design notes. |
| requirements_count | Yes | Number of requirements in the project. |
| extra_requirement_fields | No | List of extra requirement fields. |
| interface_contracts_count | Yes | Number of interface contracts in the project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations set readOnlyHint=false and destructiveHint=false, so the mutation/non-destructive profile is already known. The description adds no behavioral context such as whether this fully replaces fields, overwrites message history, or requires permissions, so it contributes nothing beyond 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two words are front-loaded but under-specified rather than concise; for a PUT tool with a nested body, additionalProperties, and full-replace semantics this is far too thin. Under-specification, not brevity, is the problem.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a complex mutation (nested object, PUT full-replace, additionalProperties true) and the description conveys none of the key semantics. Although the schema partly compensates and an output schema exists, the description itself leaves an agent without enough behavioral context to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents project_id and the nested project object. The description adds no meaning, but the baseline for fully-covered schemas is 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Update a project." restates the tool name and title without adding a specific verb+resource distinction, and it never contrasts with the obvious sibling projects_patch or requirements_update/stories_update. It is effectively a tautology rather than a description of what changes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use, prerequisites, or when-not guidance. The only routing hint ('Provide full data; use projects_patch for partial updates') lives in the input schema, not the description, so the description itself offers nothing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_update_speckit_importProjects Update Speckit ImportAInspect
For a project created by projects_import_speckit: read the same repository again and import the features added since, as written. Run projects_fold_speckit_features afterwards to fold them in. Features imported before are not re-read; those that changed are listed. Uses no AI and no credits.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | No | What to tell the user. |
| stories | Yes | |
| new_features | Yes | Feature folders imported now. |
| requirements | Yes | |
| open_questions | Yes | |
| changed_features | Yes | Features imported before whose files changed since; not re-read. |
| features_to_fold | No | Imported features still to fold, new or left by an earlier fold: run projects_fold_speckit_features while above zero. |
| answered_questions | Yes | |
| statuses_from_tasks | Yes | |
| dropped_requirements | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark it as non-read-only and non-destructive, and the description adds genuinely useful behavior: already-imported features are not re-read, only changed ones are listed, and the call consumes no AI and no credits. That cost/scope disclosure goes beyond the annotation set, though it doesn't address failure modes 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, each carrying a distinct fact (precondition, action, follow-up, incremental semantics), with the precondition front-loaded. Dense and efficient; only minor tightening possible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return shape need not be described, and the description still notes that changed features are listed. Precondition, sequencing, and cost are all covered; nothing an agent needs to invoke it correctly appears missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single project_id parameter, so the baseline is already satisfied. The description adds meaning by constraining which projects the id may refer to (one produced by projects_import_speckit), which the schema field itself does not say.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (re-read the repository and import features added since) and pins the scope to projects created by projects_import_speckit. It is immediately distinguishable from both projects_import_speckit (initial import) and projects_fold_speckit_features (which it names as a follow-up).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit precondition ('For a project created by projects_import_speckit') and explicit next step ('Run projects_fold_speckit_features afterwards to fold them in'). This tells the agent both when this tool applies and what the correct call sequence is.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
requirement_items_listRequirement Items ListBRead-onlyIdempotentInspect
List normal requirements and generated interface requirement rows for a project.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Combined requirement item kind. Supported values: requirement, interface_requirement. | |
| flags | No | Keep only items carrying at least one of these flags. | |
| story_ids | No | Story UUIDs. | |
| project_id | Yes | Project UUID (database id). | |
| content_key | No | Keep only items whose content has this key set (e.g. implementation_status). | |
| subsystem_ids | No | Subsystem UUIDs. | |
| stakeholder_ids | No | Stakeholder UUIDs. | |
| content_contains | No | With content_key, keep only items whose content[content_key] contains this substring (case-insensitive). |
Output Schema
| Name | Required | Description |
|---|---|---|
| requirement_items | Yes | Normal requirements and generated interface requirement rows. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and openWorldHint=false, so the safety profile is covered without description help. The description adds the useful scoping fact that results span two row types, but says nothing about pagination, result limits, or ordering, so it is only marginally additive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, and the key scoping detail (normal vs. generated interface rows) comes first. It is terse to the point of under-specification rather than wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and annotations cover the safety profile. What remains missing is the routing information an agent needs to pick this tool over requirements_list or interface_contracts_list, which for an 8-parameter listing tool is a real gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all eight parameters — including non-obvious ones like content_key/content_contains pairing and the kind enum values — are already documented in the schema. The description adds nothing beyond the generic phrase 'with optional filters', which is baseline-level for a fully documented schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and a precise resource scope — normal requirements plus generated interface requirement rows for a project — which is clearer than a bare 'requirements' tool. It does not, however, differentiate itself from the sibling requirements_list or interface_contracts_list, leaving the agent to infer the distinction from the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use guidance and never names an alternative such as requirements_list, which appears to cover overlapping ground. Usage is only implied by the word 'List' plus the presence of filters in the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
requirements_confirm_sourcesRequirements Confirm SourcesAInspect
Confirm a suspect requirement still holds for its stories as they read now, without rewriting it: clears suspect_story_ids. Use it when the story edit does not change what the requirement must say; otherwise rewrite the requirement or re-propagate the story. Undoable. Uses no AI and no credits.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). | |
| requirement_id | Yes | Requirement UUID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| lock | Yes | True to lock the requirement from LLM modifications. |
| flags | Yes | List of requirement flags/tags. |
| content | Yes | Requirement content object returned by the server. |
| lifecycle | Yes | Where the requirement stands. One of: draft, in_review, reviewed, in_progress, implemented, verified, blocked, rejected, superseded. The first six are a ladder from authored to tested; blocked, rejected and superseded are not progress. Writing content.implementation_status also moves this — in_progress, implemented, verified and blocked map across, while not_started is ignored rather than demoting a reviewed requirement. |
| project_id | Yes | Project UUID (database id). |
| subsystem_id | No | Subsystem UUID (database id). |
| requirement_id | Yes | Requirement UUID (database id). |
| from_description | No | True if this requirement originated from the project description. |
| source_story_ids | Yes | List of story UUIDs. |
| suspect_story_ids | No | Source stories edited after this requirement was written from them. Non-empty means it may no longer say what the story asks: re-propagate the story (projects_propagate_stories), rewrite the requirement, or confirm it still holds (requirements_confirm_sources) before implementing it. |
| source_requirement_ids | No | List of requirement UUIDs (database ids), not content.id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only establish readOnlyHint=false and destructiveHint=false; the description adds that it clears a specific field, that the action is Undoable, and that it consumes no AI or credits. Those are exactly the mutation-safety and cost facts the annotations do not carry, and they are consistent with destructiveHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences front-loaded with purpose and effect, then usage routing, then behavioral notes. No filler; each sentence carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is unnecessary. For a two-param mutation the description covers trigger, effect, reversibility, and cost, which is everything an agent needs to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (both project_id and requirement_id are documented with format and meaning), so the schema already does the work. The description adds no parameter-level detail beyond what the schema states, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Confirm a suspect requirement') and immediately names the concrete effect ('clears `suspect_story_ids`'). The clause 'without rewriting it' distinguishes it from sibling mutators like requirements_patch/requirements_update, so an agent can route correctly without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger ('when the story edit does not change what the requirement must say') and the negative case with named alternatives ('otherwise rewrite the requirement or re-propagate the story'). This is a complete when/when-not/alternative statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
requirements_createRequirements CreateCInspect
Create a requirement. Put requirement text in content.requirement and the human id in content.id, inside requirement.content; put source_story_ids, source_requirement_ids, and subsystem_id beside content inside requirement.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). | |
| requirement | Yes | Keep text, human label and metadata in content. Relationship fields alongside content accept UUIDs only. Omitted or null relationship lists preserve links in patches; [] clears them. subsystem_id:null clears the subsystem. |
Output Schema
| Name | Required | Description |
|---|---|---|
| lock | Yes | True to lock the requirement from LLM modifications. |
| flags | Yes | List of requirement flags/tags. |
| content | Yes | Requirement content object returned by the server. |
| lifecycle | Yes | Where the requirement stands. One of: draft, in_review, reviewed, in_progress, implemented, verified, blocked, rejected, superseded. The first six are a ladder from authored to tested; blocked, rejected and superseded are not progress. Writing content.implementation_status also moves this — in_progress, implemented, verified and blocked map across, while not_started is ignored rather than demoting a reviewed requirement. |
| project_id | Yes | Project UUID (database id). |
| subsystem_id | No | Subsystem UUID (database id). |
| requirement_id | Yes | Requirement UUID (database id). |
| from_description | No | True if this requirement originated from the project description. |
| source_story_ids | Yes | List of story UUIDs. |
| suspect_story_ids | No | Source stories edited after this requirement was written from them. Non-empty means it may no longer say what the story asks: re-propagate the story (projects_propagate_stories), rewrite the requirement, or confirm it still holds (requirements_confirm_sources) before implementing it. |
| source_requirement_ids | No | List of requirement UUIDs (database ids), not content.id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false), so the description does not need to restate that. It adds no behavioral context of its own: nothing about duplicate human ids, what happens when content.id is omitted, lifecycle defaults, or side effects on linked stories/subsystems. The only added content is structural placement advice, which belongs to the parameter dimension.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence plus a single dense placement sentence, with the create action front-loaded. The second half is clause-heavy but every clause maps to a real nesting decision the caller must make. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and annotations cover the safety profile. For a tool with a deeply nested required object, however, the description says nothing about creation failure modes (duplicate content.id, unknown UUID references) or default lifecycle/flags. Adequate but with visible gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, and the description mostly restates what the schema already says about nesting ('Keep text, human label and metadata in content. Relationship fields alongside content accept UUIDs only'). The emphasis on content.requirement/content.id and on source_story_ids/source_requirement_ids/subsystem_id is a helpful glovebox note for a deeply nested object, but it duplicates rather than extends the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Create a requirement.' That is enough for an agent to distinguish it from requirements_delete/patch/update in the sibling list. It stops short of naming when this creation path is preferred over alternatives, so it stays at 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no statement of prerequisites (e.g. the project and any subsystem/story must already exist), and no routing against siblings like requirements_update or requirements_patch. The schema hints that omitted relationship lists preserve links in patches, but the description itself gives the agent nothing about choosing this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
requirements_deleteRequirements DeleteBDestructiveInspect
Delete a requirement by UUID.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). | |
| requirement_id | Yes | Requirement UUID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| deleted | Yes | True when the item was deleted. |
| requirement_id | Yes | Requirement UUID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the destructive nature is covered by structured data. The description adds nothing new — it doesn't state whether deletion is permanent, whether it cascades to related items, or what permissions are needed, so it is effectively a restatement of the name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; every word carries information and there is nothing to trim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and annotations covering the safety profile, the description needn't explain return values, and both params are schema-documented. However, for a destructive mutation it still omits irreversibility and any cascade/precondition context, leaving a gap that a one-line description could easily have filled.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both parameters are documented as UUIDs in the schema. The description's 'by UUID' simply echoes that, adding no format or constraint detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Delete a requirement') plus the identifier type ('by UUID'), so the action is unambiguous. It does not name or contrast with any sibling (e.g. requirements_patch, requirements_update, or the similarly named projects_delete), so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No indication of when to use this over requirements_update/requirements_patch, no prerequisites, and no warning that the operation is irreversible. The agent must infer usage purely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
requirements_getRequirements GetCRead-onlyIdempotentInspect
Get a requirement by UUID.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). | |
| requirement_id | Yes | Requirement UUID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| lock | Yes | True to lock the requirement from LLM modifications. |
| flags | Yes | List of requirement flags/tags. |
| content | Yes | Requirement content object returned by the server. |
| lifecycle | Yes | Where the requirement stands. One of: draft, in_review, reviewed, in_progress, implemented, verified, blocked, rejected, superseded. The first six are a ladder from authored to tested; blocked, rejected and superseded are not progress. Writing content.implementation_status also moves this — in_progress, implemented, verified and blocked map across, while not_started is ignored rather than demoting a reviewed requirement. |
| project_id | Yes | Project UUID (database id). |
| subsystem_id | No | Subsystem UUID (database id). |
| requirement_id | Yes | Requirement UUID (database id). |
| from_description | No | True if this requirement originated from the project description. |
| source_story_ids | Yes | List of story UUIDs. |
| suspect_story_ids | No | Source stories edited after this requirement was written from them. Non-empty means it may no longer say what the story asks: re-propagate the story (projects_propagate_stories), rewrite the requirement, or confirm it still holds (requirements_confirm_sources) before implementing it. |
| source_requirement_ids | No | List of requirement UUIDs (database ids), not content.id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=false, so the safety profile is covered. The description adds nothing beyond that – no note on scoping to a project, error behavior for a missing requirement, or whether a requirement from another project returns an error.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no waste and the key qualifier (UUID) front-loaded. It is efficient, though borderline under-specified rather than maximally informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be explained, and annotations cover safety. However, for a project-scoped lookup the description omits what happens when the requirement isn't in the given project, leaving a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both project_id and requirement_id are documented in the schema itself. The description only restates the UUID lookup and adds no distinction between the two identifier parameters; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ('Get a requirement'), and it identifies the key by UUID, so the agent knows exactly what it retrieves. It doesn't explicitly differentiate itself from requirements_get_many or requirement_items_list, but the singular scope is implied.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus requirements_get_many, requirements_list, or requirement_items_list. The agent must infer that this is the single-item fetch from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
requirements_get_manyRequirements Get ManyARead-onlyIdempotentInspect
Fetch multiple requirements by UUID in one call. Duplicate IDs are deduplicated; unknown UUIDs are skipped.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Requirement UUIDs. | |
| project_id | Yes | Project UUID (database id). |
Output Schema
| Name | Required | Description |
|---|---|---|
| requirements | Yes | Requirements for the project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, openWorldHint=false), so the bar is lower, and the description still adds real edge-case semantics: duplicate IDs are deduplicated and unknown UUIDs are silently skipped rather than erroring. It does not disclose result ordering or whether an invalid project_id fails the whole call, which keeps 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, no filler, with the primary action front-loaded and the dedup/skip caveat immediately after. Every clause carries information an agent can act on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool with a full schema, an output schema, and rich annotations, the description supplies the one non-obvious behavior (silent skipping of unknown IDs) that an agent needs to interpret results. Only minor gaps remain around ordering and project membership constraints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters are documented there, so baseline 3 applies. The description reinforces that lookup is by UUID but adds no format, cardinality, or batching limits beyond the schema, and says nothing specific about project_id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (fetch), resource (requirements), and lookup key (UUID), plus the batch nature ('multiple ... in one call'), which implicitly separates it from the singular requirements_get and the list-based requirements_list. It stops short of naming the sibling alternative explicitly, which is what a 5 requires.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the batch-by-ID framing suggests 'use when you already have known UUIDs', but the description never states when to prefer this over requirements_list or requirements_get, nor any prerequisites (e.g., all IDs must belong to one project).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
requirements_listRequirements ListARead-onlyIdempotentInspect
List requirements for a project. suspect_only lists the ones whose source story was edited after they were written.
| Name | Required | Description | Default |
|---|---|---|---|
| story_ids | No | Story UUIDs. | |
| project_id | Yes | Project UUID (database id). | |
| suspect_only | No | Only requirements whose source story was edited after they were written (non-empty suspect_story_ids). | |
| subsystem_ids | No | Subsystem UUIDs. | |
| stakeholder_ids | No | Stakeholder UUIDs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| requirements | Yes | Requirements for the project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=false, so the safety profile is fully covered without the description. The description adds the meaning of the suspect filter but says nothing about ordering, pagination, or result limits, so it contributes only modest extra context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with zero filler; the core operation is front-loaded and the filter clarification follows. Nothing in the text is redundant or padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and full parameter coverage, the definition covers what an agent needs to call the tool. It leaves minor gaps around filter combination logic (AND vs OR across story/subsystem/stakeholder filters) and result ordering or limits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters (including the filter arrays and the suspect flag) are already documented in the schema. The description's restatement of `suspect_only` largely duplicates the schema text, adding no syntax or semantics beyond it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("List requirements") scoped to a project, so an agent immediately knows the operation and its boundary. It does not explicitly distinguish itself from nearby siblings such as requirements_get_many or requirement_items_list, so sibling differentiation is left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The sentence about `suspect_only` implies a concrete use case (finding requirements invalidated by later story edits), which is useful context. However, there is no explicit when-to-use/when-not guidance and no named alternative among the many requirement-related siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
requirements_patchRequirements PatchCInspect
Patch a requirement.
| Name | Required | Description | Default |
|---|---|---|---|
| patch | Yes | Keep text, human label and metadata in content. Relationship fields alongside content accept UUIDs only. Omitted or null relationship lists preserve links in patches; [] clears them. subsystem_id:null clears the subsystem. | |
| project_id | Yes | Project UUID (database id). | |
| requirement_id | Yes | Requirement UUID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| lock | Yes | True to lock the requirement from LLM modifications. |
| flags | Yes | List of requirement flags/tags. |
| content | Yes | Requirement content object returned by the server. |
| lifecycle | Yes | Where the requirement stands. One of: draft, in_review, reviewed, in_progress, implemented, verified, blocked, rejected, superseded. The first six are a ladder from authored to tested; blocked, rejected and superseded are not progress. Writing content.implementation_status also moves this — in_progress, implemented, verified and blocked map across, while not_started is ignored rather than demoting a reviewed requirement. |
| project_id | Yes | Project UUID (database id). |
| subsystem_id | No | Subsystem UUID (database id). |
| requirement_id | Yes | Requirement UUID (database id). |
| from_description | No | True if this requirement originated from the project description. |
| source_story_ids | Yes | List of story UUIDs. |
| suspect_story_ids | No | Source stories edited after this requirement was written from them. Non-empty means it may no longer say what the story asks: re-propagate the story (projects_propagate_stories), rewrite the requirement, or confirm it still holds (requirements_confirm_sources) before implementing it. |
| source_requirement_ids | No | List of requirement UUIDs (database ids), not content.id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the agent knows this is a mutation that is not flagged destructive. However, the description itself adds zero behavioral context — no mention that omitted/null relationship lists preserve links while [] clears them, no mention of lock preventing LLM modification, no mention of what happens to unspecified fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is short but this is under-specification rather than conciseness. It is front-loaded in the sense that it starts with the verb, but there is no structure and no second sentence earning its place by adding the patch semantics an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a nested-object patch tool with three required parameters and an output schema. The schema and annotations supply the mechanics, but the description does nothing to orient the agent on partial-update behavior, required permissions, or the relationship-field clearing rules. Adequate-by-accident via structured fields, not complete as a definition.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the patch object's own description carries the key semantics (relationship fields take UUIDs, null/omitted preserves, [] clears, subsystem_id:null clears). Per the baseline rule, a 3 is appropriate since the schema, not the description, does the heavy lifting. The description contributes nothing beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Patch a requirement' essentially restates the tool name and title without adding specificity. It gives no hint of what a patch means here (partial update, which fields, relationship semantics) and does not distinguish this tool from the sibling requirements_update. It is a tautology rather than a differentiated purpose statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use, when-not-to-use, or alternative-routing guidance at all. The obvious question — patch vs requirements_update — is left entirely to inference from the schema. Nothing in the description tells an agent which of the two mutation tools to pick.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
requirements_updateRequirements UpdateAInspect
Update a requirement. Content merges by key: send only changed content keys, using arrays for metadata, to preserve existing scalar/list values. PUT resets omitted flags, lock, from_description, subsystem_id, source_story_ids and source_requirement_ids; include their current values to preserve them. Omitted lifecycle stays unchanged unless content.implementation_status supplies a recognized status. Prefer requirements_patch for partial edits.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). | |
| requirement | Yes | Keep text, human label and metadata in content. Relationship fields alongside content accept UUIDs only. Omitted or null relationship lists preserve links in patches; [] clears them. subsystem_id:null clears the subsystem. | |
| requirement_id | Yes | Requirement UUID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| lock | Yes | True to lock the requirement from LLM modifications. |
| flags | Yes | List of requirement flags/tags. |
| content | Yes | Requirement content object returned by the server. |
| lifecycle | Yes | Where the requirement stands. One of: draft, in_review, reviewed, in_progress, implemented, verified, blocked, rejected, superseded. The first six are a ladder from authored to tested; blocked, rejected and superseded are not progress. Writing content.implementation_status also moves this — in_progress, implemented, verified and blocked map across, while not_started is ignored rather than demoting a reviewed requirement. |
| project_id | Yes | Project UUID (database id). |
| subsystem_id | No | Subsystem UUID (database id). |
| requirement_id | Yes | Requirement UUID (database id). |
| from_description | No | True if this requirement originated from the project description. |
| source_story_ids | Yes | List of story UUIDs. |
| suspect_story_ids | No | Source stories edited after this requirement was written from them. Non-empty means it may no longer say what the story asks: re-propagate the story (projects_propagate_stories), rewrite the requirement, or confirm it still holds (requirements_confirm_sources) before implementing it. |
| source_requirement_ids | No | List of requirement UUIDs (database ids), not content.id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (which only declare readOnly=false, destructive=false, openWorld=false). It discloses the exact set of fields a PUT resets when omitted (flags, lock, from_description, subsystem_id, source_story_ids, source_requirement_ids), the merge-by-key semantics, and the lifecycle/implementation_status interaction. This is precisely the destructive-ish behavior context an agent needs and that 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences, purpose front-loaded, each carrying non-redundant information. The clause about lifecycle and implementation_status is long but earns its place; overall tight, if slightly compressed for readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a nested, 3-param mutation tool with an output schema present, the description covers the critical unknowns: merge vs replace semantics, which fields are reset, and which sibling to prefer. Return values need not be explained given the output schema, so nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine semantic value: that content merges by key, that arrays should be used for metadata, and which top-level fields reset on omission versus persist. It does not restate every content field, but the merge/reset rules are the meaning the schema alone doesn't give.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (update) and resource (a requirement), and positions it against the sibling requirements_patch. However it does not restate the UUID-based selection in prose; the reader must infer 'a requirement' is selected by requirement_id, and the PUT-vs-merge distinction is only implied through the reset rules.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternative: 'Prefer requirements_patch for partial edits,' which effectively tells the agent when-not to use this tool. It doesn't spell out an affirmative when-to-use (e.g. 'use for full replacement/flag resets'), leaving that to inference, 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.
resolve_idsResolve IdsARead-onlyIdempotentInspect
Bulk-map references (human ids like Req-012, S-002 or Q-004, UUIDs, or stakeholder names) to entities in one call. Case and leading zeros in a human id do not matter: q-4 finds Q-004. Reports which refs could not be resolved.
| Name | Required | Description | Default |
|---|---|---|---|
| refs | Yes | References to resolve: human ids (e.g. Req-012, S-002, Q-004; case and leading zeros do not matter), UUIDs, or stakeholder names. | |
| project_id | Yes | Project UUID (database id). |
Output Schema
| Name | Required | Description |
|---|---|---|
| resolved | Yes | Successfully resolved references. |
| unresolved | Yes | References that could not be resolved. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and closed-world. Description adds case/leading-zero insensitivity and reports unresolved refs, which is useful behavioral context beyond annotations. Not 5 because it doesn't cover rate limits or auth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose and key resolution rule, with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Simple two-parameter tool with full schema coverage, annotations, and an output schema. Description covers purpose and key behavior; nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline 3. Description restates refs types and case rules already present in the schema; adds no new syntax or constraints beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('bulk-map') and resource ('references ... to entities'), and covers scope ('in one call'). It does not explicitly differentiate from sibling get/list tools, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage: implies use when resolving multiple references in one call, but does not name alternatives like requirements_get or requirements_get_many, nor say when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restore_project_snapshotRestore Project SnapshotAInspect
Restore a project to a previously saved snapshot's state, overwriting its current stories, requirements, and related content. The current state is pushed onto the project's undo history first, so projects_undo can revert the restore.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). | |
| snapshot_id | Yes | Snapshot UUID (database id). |
Output Schema
| Name | Required | Description |
|---|---|---|
| title | Yes | Project title (1-255 characters). |
| can_redo | Yes | True if a redo operation is available. |
| can_undo | Yes | True if an undo operation is available. |
| chosen_llm | No | The name of the LLM model chosen for the project (e.g. CLAUDE_4_5_SONNET). |
| created_at | No | Project creation timestamp (ISO 8601). |
| project_id | Yes | Project UUID (database id). |
| usage_cost | No | Accumulated usage cost as a decimal string. |
| stories_count | Yes | Number of stories in the project. |
| messages_count | Yes | Number of messages in the project history. |
| design_description | No | Project description or design notes. |
| requirements_count | Yes | Number of requirements in the project. |
| extra_requirement_fields | No | List of extra requirement fields. |
| interface_contracts_count | Yes | Number of interface contracts in the project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already declaring readOnlyHint=false and destructiveHint=false, the description adds meaningful context beyond them: exactly what is overwritten (stories, requirements, related content) and that the prior state is pushed onto undo history, explaining why the operation is reversible and thus non-destructive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: the action and its effect come first, the reversibility guarantee second. No filler or restated title text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and the safety profile is covered by annotations. The description covers effects and reversibility; only minor gaps remain (any preconditions on the snapshot or project state).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both UUID parameters are fully documented in the schema. The description adds no additional parameter meaning (no format hints, no constraints on which snapshot may be restored), so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (restore) and resource (project snapshot) with precise scope: it restores the whole project to a snapshot's state. The sibling names (get_project_snapshot, projects_undo) make it easy to distinguish from read or generation tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the restoration semantics and points to projects_undo as the way to revert, which implicitly frames when this tool is appropriate. It does not explicitly state prerequisites (e.g., snapshot must exist) or when to prefer this over importing/regenerating content.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stakeholders_createStakeholders CreateCInspect
Create a stakeholder.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). | |
| stakeholder | Yes | Stakeholder fields to create. |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | Stakeholder name or role. |
| human_id | Yes | Stakeholder human label (e.g. SH-004), for creation and display. |
| story_ids | Yes | List of story UUIDs. |
| project_id | Yes | Project UUID (database id). |
| description | No | Optional stakeholder description. |
| stakeholder_id | Yes | Stakeholder UUID (database id). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose the behavioral profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false), so the safety semantics are covered. The description adds nothing beyond what the title and annotations imply – no mention of idempotency, human_id uniqueness/collision behavior, or permissions required to create a stakeholder.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is front-loaded and wastes no words, but it is under-specified rather than genuinely concise – it restates the title almost verbatim. Appropriate length would still be a couple of sentences richer for a mutating, nested-object tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, and the schema is rich, but for a create tool that takes a nested object with required fields the description provides no context on constraints, side effects, or expected inputs. It is technically minimal but leaves the agent relying entirely on the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both project_id and the nested stakeholder object fully documented in the schema, so the baseline of 3 applies. The description contributes no additional parameter meaning (e.g. valid formats for human_id or linking semantics for story_ids).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Create a stakeholder'), so an agent immediately knows this is the creation counterpart to stakeholders_update/delete/get/list. It does not, however, explicitly differentiate itself from those siblings beyond the obvious verb, leaving no room for confusion but adding nothing beyond the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as projects_align_stakeholders_to_stories or stakeholders_update, and no stated prerequisites (e.g. the project must already exist). Usage is only trivially implied by the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stakeholders_deleteStakeholders DeleteCDestructiveInspect
Delete a stakeholder by UUID.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). | |
| stakeholder_id | Yes | Stakeholder UUID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| deleted | Yes | True when the item was deleted. |
| stakeholder_id | Yes | Stakeholder UUID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the destructive nature is covered by structured fields. The description adds nothing beyond a restatement of 'delete' – no note on irreversibility, cascade effects, or required permissions for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence, front-loaded with the action and resource, with no filler. It is efficient, though arguably too terse given the gaps elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and annotations carry the safety profile. For a simple destructive delete, the description is minimally adequate but omits any usage or consequence context an agent would want.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both project_id and stakeholder_id are fully documented in the schema. The description's 'by UUID' phrasing is redundant with the schema and actually underrepresents that two identifiers (project scope plus stakeholder) are required, so it adds no meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Delete a stakeholder') plus the identifying key ('by UUID'), so the agent knows exactly what operation this is. It does not differentiate itself from siblings like stakeholders_get, stakeholders_update, or stakeholders_list, but the intent is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance, and no prerequisites or alternatives named. The agent must infer usage purely from the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stakeholders_getStakeholders GetBRead-onlyIdempotentInspect
Get a stakeholder by UUID.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). | |
| stakeholder_id | Yes | Stakeholder UUID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | Stakeholder name or role. |
| human_id | Yes | Stakeholder human label (e.g. SH-004), for creation and display. |
| story_ids | Yes | List of story UUIDs. |
| project_id | Yes | Project UUID (database id). |
| description | No | Optional stakeholder description. |
| stakeholder_id | Yes | Stakeholder UUID (database id). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint=false, so the safety profile is fully covered by structured data. The description adds nothing behavioral beyond that (no not-found or error behavior), so it sits at the baseline rather than contributing extra context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the resource and lookup key front-loaded; there is no filler to trim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema documenting the return value and annotations covering the safety profile, the description is minimally sufficient. However, it omits the required project scoping and any note on not-found behavior, leaving gaps for a two-parameter lookup tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both UUIDs documented in the schema itself, so baseline 3 applies. The description's 'by UUID' aligns with the stakeholder_id parameter but omits the equally required project_id scoping.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (get) and resource (stakeholder) plus the identifier used to retrieve it. It distinguishes itself from stakeholders_list implicitly via 'by UUID,' though it never names the sibling directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance and no mention of alternatives such as stakeholders_list for enumeration or stakeholders_get_many for batch retrieval. The 'by UUID' phrasing only weakly implies the single-lookup case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stakeholders_listStakeholders ListCRead-onlyIdempotentInspect
List stakeholders for a project.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). |
Output Schema
| Name | Required | Description |
|---|---|---|
| stakeholders | Yes | Stakeholders for the project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint=false, so the safety profile is covered. The description adds nothing beyond that — no mention of pagination, filtering options, or result scope, which is the kind of context that would earn credit here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single clean sentence with no filler and the resource front-loaded. It is efficient, though so terse that it verges on under-specification rather than demonstrating deliberate structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a full output schema, annotations covering safety, and a single fully documented parameter, the description is minimally adequate for invocation. It leaves gaps around result volume/pagination and how this list differs from other stakeholder-related tools, which a richer definition would close.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single project_id parameter is fully documented in the schema as a UUID database id. The description adds no syntax or format detail beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('List stakeholders') scoped to a project, so the agent knows exactly what it returns. It does not distinguish itself from siblings like stakeholders_get or projects_align_stakeholders_to_stories, though the verb/resource pairing is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus stakeholders_get or projects-related stakeholder tools, no prerequisites, and no exclusions. Usage must be inferred entirely from the name and the listed siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stakeholders_updateStakeholders UpdateAInspect
Update a stakeholder by UUID. Omit a field to leave it unchanged. 'story_ids' replaces the linked stories rather than adding to them, so pass the full list you want to end up with.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). | |
| stakeholder | Yes | Stakeholder fields to update. Omit a field to leave it unchanged. story_ids replaces the linked stories rather than adding to them. | |
| stakeholder_id | Yes | Stakeholder UUID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | Stakeholder name or role. |
| human_id | Yes | Stakeholder human label (e.g. SH-004), for creation and display. |
| story_ids | Yes | List of story UUIDs. |
| project_id | Yes | Project UUID (database id). |
| description | No | Optional stakeholder description. |
| stakeholder_id | Yes | Stakeholder UUID (database id). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the safety profile is already covered. The description adds non-trivial mutation semantics: silent field retention on omission, and that 'story_ids' replaces rather than appends to linked stories — important because that call can silently drop existing links. It stops short of mentioning permission/auth needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, zero filler, with the identifier requirement and the partial-update rule front-loaded before the destructive-replace caveat. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and annotations cover the safety profile. The description supplies the two behavioral quirks an agent most needs (omission semantics, replace-not-append), leaving only minor gaps such as required project scoping and permissions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the nested 'stakeholder' property already carries nearly identical text ('Omit a field to leave it unchanged. story_ids replaces the linked stories...'), so the description largely restates structured data. Baseline 3 is correct when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Update a stakeholder by UUID'), which cleanly separates it from siblings stakeholders_create, stakeholders_get, and stakeholders_delete. It does not explicitly contrast itself with update-adjacent alternatives like projects_align_stakeholders_to_stories, but the name/resource pairing is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Omit a field to leave it unchanged' tells the agent how to perform a partial update, which is genuinely useful invocation guidance. However, there is no explicit when-to-use/when-not guidance versus stakeholders_create or the alignment tools, 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.
stories_createStories CreateAInspect
Create a story. With run_align_to_story, an alignment that fails leaves the story saved, and alignment_failure says why.
| Name | Required | Description | Default |
|---|---|---|---|
| story | Yes | Story fields to create. | |
| project_id | Yes | Project UUID (database id). |
Output Schema
| Name | Required | Description |
|---|---|---|
| extra | No | Optional free-form metadata object. |
| content | Yes | Story text. |
| human_id | Yes | Story human label (e.g. S-3), for creation and display. |
| story_id | Yes | Story UUID (database id). |
| project_id | Yes | Project UUID (database id). |
| requirement_ids | Yes | List of requirement UUIDs (database ids), not content.id. |
| stakeholder_ids | Yes | List of stakeholder UUIDs. |
| lifecycle_rollup | Yes | How the requirements underneath are distributed across lifecycle values. |
| alignment_failure | No | Present when `run_align_to_story` was asked for and the alignment did not finish: why. The story is saved all the same; retry with stories_update and `run_align_to_story: true`. |
| outdated_requirement_ids | No | Requirements written from an earlier text of this story, which may no longer match it. Re-propagating the story revisits them. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false. The description adds genuinely useful non-obvious behavior: a failing alignment leaves the story saved anyway, and alignment_failure reports the cause. This is real context beyond the structured fields, though permissions and idempotency are not addressed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, zero filler, with the primary action front-loaded and the edge-case caveat immediately after. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description covers the key alignment-failure edge case. It omits prerequisites (project existence) and how the nested story payload relates to project_id, leaving minor gaps for a nested-object create.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description goes further by explaining the failure semantics of run_align_to_story (story persists, alignment_failure explains why), adding meaning the schema line alone does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a story'), so the core action is unambiguous. It does not distinguish this tool from sibling creation paths such as projects_make_stories_from_description or open_questions_convert_to_story, so an agent gets no help choosing among them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The mention of run_align_to_story implies a usage condition (create then align in one step), but there is no explicit when-to-use versus alternatives guidance, no prerequisites, and no exclusions. Usage is only hinted at.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stories_deleteStories DeleteBDestructiveInspect
Delete a story by UUID.
| Name | Required | Description | Default |
|---|---|---|---|
| story_id | Yes | Story UUID. | |
| project_id | Yes | Project UUID (database id). |
Output Schema
| Name | Required | Description |
|---|---|---|
| deleted | Yes | True when the item was deleted. |
| story_id | Yes | Story UUID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the agent knows this mutates and destroys data. The description adds no further behavioral context such as irreversibility, cascading effects on linked requirements, or auth requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; the core action and identifier are stated immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be described, and annotations carry the safety profile. Still, for a destructive operation with no usage guidance or impact disclosure, the description is only minimally adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters (story_id, project_id) are documented with UUID formats in the schema, so the schema does the heavy lifting. The description's 'by UUID' adds nothing beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Delete) and resource (story), plus the identifier used (UUID). An agent can tell it apart from stories_update/stories_get, though it does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, when-not-to-use, or alternatives are given; usage is only implied by the verb 'delete'. There is no mention of prerequisites such as project scoping or permissions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stories_getStories GetBRead-onlyIdempotentInspect
Get a story by UUID.
| Name | Required | Description | Default |
|---|---|---|---|
| story_id | Yes | Story UUID. | |
| project_id | Yes | Project UUID (database id). |
Output Schema
| Name | Required | Description |
|---|---|---|
| extra | No | Optional free-form metadata object. |
| content | Yes | Story text. |
| human_id | Yes | Story human label (e.g. S-3), for creation and display. |
| story_id | Yes | Story UUID (database id). |
| project_id | Yes | Project UUID (database id). |
| requirement_ids | Yes | List of requirement UUIDs (database ids), not content.id. |
| stakeholder_ids | Yes | List of stakeholder UUIDs. |
| lifecycle_rollup | Yes | How the requirements underneath are distributed across lifecycle values. |
| outdated_requirement_ids | No | Requirements written from an earlier text of this story, which may no longer match it. Re-propagating the story revisits them. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, covering the safety and idempotency profile. The description adds no behavioral context beyond what those annotations and the output schema provide, such as project scoping or side-effect details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. It is arguably under-sized for a tool with two required parameters, but it is not verbose or poorly structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple get operation, 100% schema coverage, rich annotations, and an output schema, the description is nearly sufficient. Its main gap is the lack of routing guidance against sibling retrieval tools, but the structured fields carry most of the burden.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are fully documented by the schema itself. The description adds no meaning beyond the schema; its 'by UUID' phrase maps only to story_id and omits the required project_id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get') and resource ('a story') and implies singular retrieval by UUID, which distinguishes it from siblings like stories_list and stories_get_many. However, it does not explicitly differentiate itself from those alternatives by name or clarify that project scoping is required.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as stories_get_many, stories_list, or stories_update. Usage is only implied by the singular 'a story' phrasing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stories_get_manyStories Get ManyARead-onlyIdempotentInspect
Fetch multiple stories by UUID in one call. Duplicate IDs are deduplicated; unknown UUIDs are skipped.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Story UUIDs. | |
| project_id | Yes | Project UUID (database id). |
Output Schema
| Name | Required | Description |
|---|---|---|
| stories | Yes | Stories for the project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-open-world), and the description adds genuine edge-case behavior: duplicate IDs are deduplicated and unknown UUIDs are silently skipped. This tells the agent to expect partial results rather than an error, which is valuable context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the core action and followed by the two behavioral caveats. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and the annotations carry the safety profile. Combined with the dedup/skip behavior, the definition is nearly complete; only the sibling routing (when to use this vs stories_get/list) is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (ids array and project_id) are already documented in the schema. The description adds no format or batching detail beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (fetch) and resource (stories) with batch scope ('multiple ... in one call'), which implicitly separates it from the singular stories_get and the unfiltered stories_list. It does not name those siblings explicitly, so it falls just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'In one call' implies the batching use case (avoid N single fetches), but the description never states when to prefer this over stories_get or stories_list. Usage is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stories_listStories ListCRead-onlyIdempotentInspect
List stories for a project.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). |
Output Schema
| Name | Required | Description |
|---|---|---|
| stories | Yes | Stories for the project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and openWorldHint=false, so the safety profile is covered. The description adds nothing beyond that — no pagination behavior, no result limits, no statement of what the list contains or whether it is filtered/ordered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence that is front-loaded and free of padding, which is structurally clean. But the brevity reflects under-specification rather than disciplined conciseness, so it does not rise above a minimum-viable mark.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. Still, for a tool in a dense sibling set containing stories_get, stories_get_many and requirements_list, the description omits any routing or scoping context an agent needs to select it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single project_id parameter is fully documented in the schema as a project UUID. The description's phrase 'for a project' merely restates the schema rather than adding format or constraint detail, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb+resource ('List stories') and scopes it to a project, so the basic operation is unambiguous. However, it offers no differentiation from siblings such as stories_get_many, which also returns multiple stories, leaving the agent to guess which is appropriate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of alternatives (e.g., stories_get_many for ID-based retrieval), and no prerequisites or exclusions. The only usage signal is the implicit project scoping carried by the required parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stories_updateStories UpdateAInspect
Update a story. With run_align_to_story, an alignment that fails leaves the update saved, and alignment_failure says why.
| Name | Required | Description | Default |
|---|---|---|---|
| story | Yes | Story fields to update. | |
| story_id | Yes | Story UUID. | |
| project_id | Yes | Project UUID (database id). |
Output Schema
| Name | Required | Description |
|---|---|---|
| extra | No | Optional free-form metadata object. |
| content | Yes | Story text. |
| human_id | Yes | Story human label (e.g. S-3), for creation and display. |
| story_id | Yes | Story UUID (database id). |
| project_id | Yes | Project UUID (database id). |
| requirement_ids | Yes | List of requirement UUIDs (database ids), not content.id. |
| stakeholder_ids | Yes | List of stakeholder UUIDs. |
| lifecycle_rollup | Yes | How the requirements underneath are distributed across lifecycle values. |
| alignment_failure | No | Present when `run_align_to_story` was asked for and the alignment did not finish: why. The story is saved all the same; retry with stories_update and `run_align_to_story: true`. |
| outdated_requirement_ids | No | Requirements written from an earlier text of this story, which may no longer match it. Re-propagating the story revisits them. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds genuinely new behavioral detail: a failing alignment via run_align_to_story still persists the update, and alignment_failure explains the cause — important context an agent couldn't get from annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core purpose, then the alignment caveat. No filler, though it is quite terse for a mutation with a trigger flag.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation, and the schema documents all parameters at 100% coverage. The description covers the one subtle behavior (partial-save on alignment failure) that the structured fields don't, making it complete for this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real semantic value about the run_align_to_story parameter — that a failure does not roll back the save and produces an alignment_failure reason. That consequence is not conveyed by the schema field description alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Update a story') that clearly distinguishes it from siblings like stories_create, stories_get, and stories_delete. It doesn't explicitly name alternatives, but the name/description pairing leaves no ambiguity about the operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the operation ('update a story'), and the description discloses the run_align_to_story trigger behavior. However, it offers no explicit when-to-use vs alternatives context, no prerequisites, and no guidance on when to enable alignment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
subsystems_createSubsystems CreateCInspect
Create a subsystem.
| Name | Required | Description | Default |
|---|---|---|---|
| subsystem | Yes | Subsystem fields to create. | |
| project_id | Yes | Project UUID (database id). |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | Subsystem name. |
| project_id | Yes | Project UUID (database id). |
| description | No | Subsystem description. |
| subsystem_id | Yes | Subsystem UUID (database id). |
| lifecycle_rollup | Yes | How the requirements underneath are distributed across lifecycle values. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds nothing further: no auth requirements, no behavior on duplicate names, no statement of side effects, and no tie to the referenced project_id. It contributes no context beyond what the annotations and title already convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
'Create a subsystem.' is a single front-loaded sentence with no wasted words, but it is essentially a restatement of the title and earns little informational place. It is not verbose, but it is under-specified rather than appropriately concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the input schema is fully described. But for a nested-object creation tool with several sibling subsystem and project tools, the description omits any context on what a subsystem is, how it relates to project_id, or when creation is appropriate versus updating, leaving the agent under-informed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents project_id (Project UUID) and the nested subsystem object fields (name, description). The description adds no syntax, format, or constraint detail beyond the schema, which is the baseline for full-coverage schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a subsystem'), so an agent can tell it is a write operation on the subsystem resource. However, it contains zero differentiation from the many sibling creation tools (create_project_snapshot, interface_contracts_create, stories_create, etc.) or from subsystems_update/delete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites (e.g., the project must exist), and no mention of alternatives such as subsystems_update when the subsystem already exists. The agent must infer everything from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
subsystems_deleteSubsystems DeleteCDestructiveInspect
Delete a subsystem by UUID.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). | |
| subsystem_id | Yes | Subsystem UUID (database id). | |
| cascade_interface_contracts | No | If true, delete active interface contracts linked to the subsystem before deleting the subsystem. |
Output Schema
| Name | Required | Description |
|---|---|---|
| deleted | Yes | True when the item was deleted. |
| subsystem_id | Yes | Subsystem UUID (database id). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so safety semantics are covered. The description adds nothing beyond them: it does not state that the deletion is irreversible, what happens to linked interface contracts by default, or any permission requirements, so it contributes no behavioral context the annotations lack.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, so nothing is wasted. However, for a destructive operation the brevity crosses into under-specification rather than genuine conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The operation is simple, the schema fully documents inputs, and an output schema exists so return values need not be explained. Still missing is any usage or consequence context for the cascade option and irreversibility, leaving a modest gap for a destructive tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented, including the cascade_interface_contracts flag. The description only reinforces the UUID-based selection, which is the expected baseline 3 when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (delete) and resource (subsystem) plus the identification mechanism (UUID), which cleanly distinguishes it from siblings like subsystems_get, subsystems_update, and subsystems_list. It does not explicitly name those siblings, but the CRUD naming makes the operation unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no exclusions, and no mention of when cascade deletion is appropriate versus deleting interface contracts separately. The agent must infer everything from the tool name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
subsystems_getSubsystems GetCRead-onlyIdempotentInspect
Get a subsystem by id.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). | |
| subsystem_id | Yes | Subsystem UUID (database id). |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | Subsystem name. |
| project_id | Yes | Project UUID (database id). |
| description | No | Subsystem description. |
| subsystem_id | Yes | Subsystem UUID (database id). |
| lifecycle_rollup | Yes | How the requirements underneath are distributed across lifecycle values. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=false, so the safety profile is covered. The description adds nothing beyond that basic read semantics: no note on missing/404 behavior, error handling, or lookup constraints. It does not contradict the annotations, but it provides no extra behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. It is appropriately terse for a simple lookup tool, though the absence of any distinction or usage clause leaves it slightly under-structured relative to the sibling set.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity, full schema descriptions, annotations, and an output schema, the description is minimally sufficient to invoke the tool. It omits how to obtain the required IDs and when to prefer this over subsystems_list, but those gaps are partially mitigated by the schema and sibling names.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both required UUID parameters are fully documented in the input schema. The description says 'by id,' which loosely maps to subsystem_id but does not clarify why project_id is also required or add any format/usage nuance. Baseline 3 is appropriate when the schema carries the parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('Get a subsystem'), and the singular 'a subsystem by id' hints at a single-record fetch rather than a list. However, it never explicitly differentiates itself from siblings like subsystems_list or subsystems_create. It is clear but not sibling-aware.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of alternatives such as subsystems_list for discovering IDs, and no prerequisites. The agent must infer entirely from the sibling names and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
subsystems_listSubsystems ListCRead-onlyIdempotentInspect
List subsystems for a project.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID (database id). |
Output Schema
| Name | Required | Description |
|---|---|---|
| subsystems | Yes | Subsystems for the project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint=false, so the safety profile is covered. The description contributes nothing beyond that — no mention of pagination, result ordering, or behavior when a project has no subsystems. No contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short, front-loaded sentence with no filler. It is efficient, though its brevity borders on under-specification rather than purposeful compression.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with an output schema and safety annotations, the essentials are covered — return values need not be described. However, it omits any scoping nuance (filtering, ordering, emptiness behavior) that would help an agent invoke it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single project_id parameter is fully documented as a UUID in the schema, so the description is not required to carry parameter meaning. Baseline 3 applies since the description adds no format or constraint detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb (List) and resource (subsystems) scoped to a project, which distinguishes it from the siblings subsystems_get, subsystems_create, and subsystems_delete by operation. It does not, however, differentiate itself from projects_detect_subsystems, which sounds closely related.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of alternatives (e.g., subsystems_get for a single subsystem or projects_detect_subsystems for discovery). Usage is only implied by the verb 'List'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
subsystems_updateSubsystems UpdateCInspect
Update a subsystem.
| Name | Required | Description | Default |
|---|---|---|---|
| subsystem | Yes | Subsystem fields to update. | |
| project_id | Yes | Project UUID (database id). | |
| subsystem_id | Yes | Subsystem UUID (database id). |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | Subsystem name. |
| project_id | Yes | Project UUID (database id). |
| description | No | Subsystem description. |
| subsystem_id | Yes | Subsystem UUID (database id). |
| lifecycle_rollup | Yes | How the requirements underneath are distributed across lifecycle values. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so safety basics are covered. The description adds nothing beyond that — it does not say whether only provided fields are changed, whether updates are reversible, or what happens to omitted nested fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with no waste, but it is terse to the point of being uninformative rather than genuinely concise. There is no structure to critique simply because there is almost no content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, but for a mutation tool with a nested object parameter the description should clarify partial-update behavior and scope. As written, it omits anything an agent could not already get from the schema and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the nested subsystem object, project_id, and subsystem_id are already documented in the schema. The description adds no meaning about partial-update semantics or which nested fields are updatable, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Update) and resource (subsystem), which is enough to know what the tool does. However, it offers no differentiation from sibling mutation tools such as subsystems_create, subsystems_delete, or projects_update, and the target scope (project-scoped subsystem by UUID) is left to the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus subsystems_create, subsystems_delete, or other update/patch tools, and no prerequisites or exclusions are stated. The only implied context is that a subsystem must already exist, which the agent must infer from the required IDs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggestions_acceptSuggestions AcceptADestructiveInspect
Apply suggestions, by the ids a run's saved_suggestions or suggestions_list gives, all as one change a single undo reverts. Per item, fields applies only some proposed keys and values applies your own value instead. Items whose target changed since they were made come back in stale and are not applied unless force is true. Uses no AI and no credits.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | Apply stale items too, overwriting later changes. | |
| items | Yes | ||
| project_id | Yes | Project UUID (database id). |
Output Schema
| Name | Required | Description |
|---|---|---|
| stale | Yes | Not applied: the target changed or is gone. |
| blocked | Yes | Not applied, still pending: the requirement is locked, or the story to delete backs a reviewed requirement. |
| created | Yes | Suggestion UUID mapped to its created entity UUID. |
| accepted | Yes | |
| kept_pending | Yes | Updates accepted for only some fields: applied, and still pending with the rest. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the annotations: all items apply as one change reverted by a single undo (atomicity), stale items are returned in `stale` and skipped unless forced, and it explicitly notes no AI and no credits are consumed. This goes well past the destructiveHint=true annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: purpose first, then per-item overrides, then stale/force semantics, then cost. Every sentence carries distinct information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter mutation tool with an output schema, the description covers the essentials an agent needs: atomic undo, stale handling, override mechanics, and the no-AI/no-credit cost. Return values are deferred to the output schema, which is appropriate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, and the description adds real meaning: `fields` applies only some proposed keys while `values` overrides with your own, and both the top-level and per-item force flags govern stale items. The individual value keys and item id format remain schema-only, but the field/value distinction is clarified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (Apply) plus resource (suggestions) and the id provenance (a run's saved_suggestions or suggestions_list), which cleanly separates it from suggestions_reject. An agent can tell what it 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states where the required ids come from and explains force/stale conditions, giving clear context for when this tool applies. It does not explicitly name suggestions_reject as the alternative nor spell out when-not to use, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggestions_listSuggestions ListARead-onlyIdempotentInspect
List AI suggestions waiting for review, grouped by the run that made them (Analyze, Generate, Audit backlog, Propagate stories), newest first. Each item proposes creating, changing or deleting one requirement or story; changes holds the proposed values. Pending only by default. Uses no AI and no credits.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Which states to list; pending when omitted. | |
| operation | No | ||
| project_id | Yes | Project UUID (database id). |
Output Schema
| Name | Required | Description |
|---|---|---|
| batches | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and closed-world, so the bar is lower. The description still adds real substance: newest-first ordering, grouping by run, pending-only default, the shape of each item ('changes' holds proposed values), and the notable cost fact that it uses no AI and no credits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences with no filler; scope, grouping, ordering, item shape and cost are all front-loaded. Nothing could be cut without losing information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be detailed, and the description still covers the salient ones. Params, ordering, grouping, defaults and cost are all present; only result-size or paging behaviour is unaddressed, which is a minor gap for a filtered list.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% and the undocumented `operation` parameter is compensated for: the description names the four run types (Analyze, Generate, Audit backlog, Propagate stories) that map to its enum values. It also documents the default for `status` ('Pending only by default'), adding meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('List AI suggestions') with scope and grouping semantics ('grouped by the run that made them'), and enumerates the four run types by name. It is clearly distinguishable from the sibling write tools suggestions_accept and suggestions_reject.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'waiting for review' and the default 'Pending only', which sets up the review workflow that siblings suggestions_accept/reject complete. However, it never explicitly says when to choose this over alternatives or when to widen the status filter, nor does it mention prerequisites for the review flow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggestions_rejectSuggestions RejectAInspect
Decline suggestions, by the ids a run's saved_suggestions or suggestions_list gives. The project does not change. Uses no AI and no credits.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | ||
| project_id | Yes | Project UUID (database id). |
Output Schema
| Name | Required | Description |
|---|---|---|
| rejected | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already declaring destructiveHint=false and openWorldHint=false, the description usefully adds that 'The project does not change' and that it 'Uses no AI and no credits' – non-obvious side-effect and billing facts. It doesn't describe whether the rejection is reversible or what the response contains, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with the action front-loaded and no filler. The opening clause is slightly awkward, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and annotations cover the safety profile. The description supplies the remaining non-destructive/no-credit context; only the reversibility of a rejected suggestion is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50% and both params carry their own descriptions. The description adds only the provenance of the ids array; it does not clarify the project_id semantics or id format beyond what the schema states, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Decline suggestions') and identifies the source of the ids, which lets an agent distinguish this from suggestions_accept. It stops just short of a 5 because it never names the accept sibling or other alternatives explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for use by pointing at where valid ids come from ('a run's saved_suggestions or suggestions_list'). It provides no when-not guidance or explicit alternative, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
users_get_meUsers Get MeBRead-onlyIdempotentInspect
Get current user profile.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| Yes | User email address. | |
| credit | No | Remaining credit as a decimal string. |
| user_id | Yes | User UUID (database id). |
| username | Yes | User login username. |
| full_name | No | User display name. |
| is_active | Yes | Whether the user account is active. |
| usage_cost | No | Total usage cost as a decimal string. |
| project_ids | Yes | List of project UUIDs. |
| is_superuser | Yes | Whether the user has admin privileges. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=false, so the safety profile is fully covered. The description adds essentially no behavioral context beyond restating the name — it doesn't mention that it operates on the authenticated user's context or anything about the response shape. With annotations doing the heavy lifting this is a low-value description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single clause, front-loaded and free of waste. It is appropriately sized for a zero-parameter tool, though it is so terse that it borders on under-specification.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a trivial, zero-parameter read tool with a full annotation set and an output schema, the description covers what an agent needs to select and invoke it. Return values need not be explained because an output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline is 4. The schema is empty and there is nothing for the description to clarify, and it correctly implies the target user is the caller rather than a supplied identifier.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get current user profile.' The meaning is unambiguous and, since there are no sibling users_* tools in the list, there is nothing to confuse it with. It stops short of a 5 only because it offers no scope detail beyond the bare resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use, when-not-to-use, or alternatives are given. Usage is only implied by the name and the absence of parameters — an agent will infer it returns the authenticated caller's own profile. Adequate but with no routing guidance.
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.
9 tool updates
- Changed
open_questions_convert_to_story2 fields changed- added
Output schema / properties / story / properties / human_idAdded value: +{ + "description": "Story human label (e.g. S-3), for creation and display.", + "type": "string" +} - changed
Output schema / properties / story / requiredPrevious value: -[ - "story_id", - "project_id", - "content", - "requirement_ids", - "stakeholder_ids", - "lifecycle_rollup" -]New value: +[ + "story_id", + "human_id", + "project_id", + "content", + "requirement_ids", + "stakeholder_ids", + "lifecycle_rollup" +]
- Changed
projects_export4 fields changed- added
Output schema / properties / assessment_detailsAdded value: +{ + "description": "Accepted explanation of the project assessment.", + "type": "string" +} - added
Output schema / properties / assessment_scoreAdded value: +{ + "description": "Accepted project completeness assessment, from 0 to 100.", + "type": "integer" +} - added
Output schema / properties / open_questionsAdded value: +{ + "items": { + "properties": { + "answer": { + "type": [ + "string", + "null" + ] + }, + "human_id": { + "type": "string" + }, + "question": { + "type": "string" + }, + "rationale": { + "type": "string" + }, + "resulting_story_id": { + "description": "Human id of the story its answer was converted into.", + "type": [ + "string", + "null" + ] + }, + "status": { + "description": "open, answered or dismissed.", + "type": "string" + }, + "story_id": { + "description": "Human id of the story the question was raised about.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "human_id", + "question" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / requirements / items / properties / lifecycleAdded value: +{ + "description": "draft, in_review, reviewed, in_progress, implemented, verified, blocked, rejected or superseded. Absent in files written before it existed; import then reads content.implementation_status.", + "type": "string" +}
- Changed
projects_import6 fields changed- added
Input schema / properties / data / properties / assessment_detailsAdded value: +{ + "description": "Accepted explanation of the project assessment.", + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / data / properties / assessment_scoreAdded value: +{ + "description": "Accepted project completeness assessment, from 0 to 100.", + "type": [ + "integer", + "null" + ] +} - changed
Input schema / properties / data / properties / extra_requirement_attributes / descriptionPrevious value: -"The requirement attributes this project generates. Absent when the project never chose a list, which is not the same as choosing an empty one: absent shows every content field, [] shows only the core ones."New value: +"The requirement attributes this project generates. Absent when the project never chose a list, which is not the same as choosing an empty one: absent shows every content field, [] shows only the core ones. Files before schema version 3 wrote null for absent." - changed
Input schema / properties / data / properties / extra_requirement_attributes / typePrevious value: -"array"New value: +[ + "array", + "null" +] - added
Input schema / properties / data / properties / open_questionsAdded value: +{ + "items": { + "properties": { + "answer": { + "type": [ + "string", + "null" + ] + }, + "human_id": { + "type": "string" + }, + "question": { + "type": "string" + }, + "rationale": { + "type": "string" + }, + "resulting_story_id": { + "description": "Human id of the story its answer was converted into.", + "type": [ + "string", + "null" + ] + }, + "status": { + "description": "open, answered or dismissed.", + "type": "string" + }, + "story_id": { + "description": "Human id of the story the question was raised about.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "human_id", + "question" + ], + "type": "object" + }, + "type": "array" +} - added
Input schema / properties / data / properties / requirements / items / properties / lifecycleAdded value: +{ + "description": "draft, in_review, reviewed, in_progress, implemented, verified, blocked, rejected or superseded. Absent in files written before it existed; import then reads content.implementation_status.", + "type": "string" +}
- Changed
resolve_ids1 field changed- changed
Input schema / properties / refs / descriptionPrevious value: -"References to resolve: human ids (e.g. Req-012, S-3), UUIDs, or stakeholder names."New value: +"References to resolve: human ids (e.g. Req-012, S-002, Q-004; case and leading zeros do not matter), UUIDs, or stakeholder names."
- Changed
stories_create2 fields changed- added
Output schema / properties / human_idAdded value: +{ + "description": "Story human label (e.g. S-3), for creation and display.", + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "story_id", - "project_id", - "content", - "requirement_ids", - "stakeholder_ids", - "lifecycle_rollup" -]New value: +[ + "story_id", + "human_id", + "project_id", + "content", + "requirement_ids", + "stakeholder_ids", + "lifecycle_rollup" +]
- Changed
stories_get2 fields changed- added
Output schema / properties / human_idAdded value: +{ + "description": "Story human label (e.g. S-3), for creation and display.", + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "story_id", - "project_id", - "content", - "requirement_ids", - "stakeholder_ids", - "lifecycle_rollup" -]New value: +[ + "story_id", + "human_id", + "project_id", + "content", + "requirement_ids", + "stakeholder_ids", + "lifecycle_rollup" +]
- Changed
stories_get_many2 fields changed- added
Output schema / properties / stories / items / properties / human_idAdded value: +{ + "description": "Story human label (e.g. S-3), for creation and display.", + "type": "string" +} - changed
Output schema / properties / stories / items / requiredPrevious value: -[ - "story_id", - "project_id", - "content", - "requirement_ids", - "stakeholder_ids", - "lifecycle_rollup" -]New value: +[ + "story_id", + "human_id", + "project_id", + "content", + "requirement_ids", + "stakeholder_ids", + "lifecycle_rollup" +]
- Changed
stories_list2 fields changed- added
Output schema / properties / stories / items / properties / human_idAdded value: +{ + "description": "Story human label (e.g. S-3), for creation and display.", + "type": "string" +} - changed
Output schema / properties / stories / items / requiredPrevious value: -[ - "story_id", - "project_id", - "content", - "requirement_ids", - "stakeholder_ids", - "lifecycle_rollup" -]New value: +[ + "story_id", + "human_id", + "project_id", + "content", + "requirement_ids", + "stakeholder_ids", + "lifecycle_rollup" +]
- Changed
stories_update2 fields changed- added
Output schema / properties / human_idAdded value: +{ + "description": "Story human label (e.g. S-3), for creation and display.", + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "story_id", - "project_id", - "content", - "requirement_ids", - "stakeholder_ids", - "lifecycle_rollup" -]New value: +[ + "story_id", + "human_id", + "project_id", + "content", + "requirement_ids", + "stakeholder_ids", + "lifecycle_rollup" +]
79 tool updates
- First observed
create_project_snapshot - First observed
get_project_snapshot - First observed
interface_contracts_create - First observed
interface_contracts_delete - First observed
interface_contracts_get - First observed
interface_contracts_list - First observed
interface_contracts_patch - First observed
interface_contracts_update - First observed
open_questions_answer - First observed
open_questions_convert_to_story - First observed
open_questions_list - First observed
project_search - First observed
projects_align_requirements_to_stories - First observed
projects_align_stakeholders_to_stories - First observed
projects_align_to_story - First observed
projects_analyze - First observed
projects_ask_extra_feature - First observed
projects_assess - First observed
projects_audit_backlog - First observed
projects_check_description - First observed
projects_create - First observed
projects_delete - First observed
projects_detect_subsystems - First observed
projects_diff - First observed
projects_export - First observed
projects_export_openspec - First observed
projects_export_speckit - First observed
projects_fold_speckit_features - First observed
projects_generate - First observed
projects_get - First observed
projects_get_assessment - First observed
projects_get_messages - First observed
projects_import - First observed
projects_import_openspec - First observed
projects_import_speckit - First observed
projects_list - First observed
projects_list_snapshots - First observed
projects_make_description - First observed
projects_make_stories_from_description - First observed
projects_overview - First observed
projects_patch - First observed
projects_propagate_requirements_to_subsystems - First observed
projects_propagate_stories - First observed
projects_redo - First observed
projects_specify_design - First observed
projects_undo - First observed
projects_update - First observed
projects_update_speckit_import - First observed
requirement_items_list - First observed
requirements_confirm_sources - First observed
requirements_create - First observed
requirements_delete - First observed
requirements_get - First observed
requirements_get_many - First observed
requirements_list - First observed
requirements_patch - First observed
requirements_update - First observed
resolve_ids - First observed
restore_project_snapshot - First observed
stakeholders_create - First observed
stakeholders_delete - First observed
stakeholders_get - First observed
stakeholders_list - First observed
stakeholders_update - First observed
stories_create - First observed
stories_delete - First observed
stories_get - First observed
stories_get_many - First observed
stories_list - First observed
stories_update - First observed
subsystems_create - First observed
subsystems_delete - First observed
subsystems_get - First observed
subsystems_list - First observed
subsystems_update - First observed
suggestions_accept - First observed
suggestions_list - First observed
suggestions_reject - First observed
users_get_me
Publisher details
- Operator
- Entalpa Corp · Publisher source
- Operator website
- Not applicable
- Vendor relationship
- Not applicable
- Documentation
- https://entalpa.com/en/connect · Publisher source
- Trust center
- Not available
- Restrictions
- registration and usage via MCP is free, generations using LLM are paid
Related MCP Connectors
Requirements authority for AI coding agents: binding requirements and acceptance criteria.
Codebase knowledge graph — architectural awareness for AI coding agents via MCP
AI-powered spec-to-task decomposition and execution orchestration for coding agents.
Work management where AI agents are first-class members: tasks, projects, memory over hosted MCP
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA methodology and MCP server for agent-driven software development where humans write specs and agents implement code, enforced by six mechanical gates to ensure spec validity, contracts, tests, and review.147 npmMIT
- AlicenseAqualityDmaintenanceMCP server that integrates GitHub Spec-Kit with AI coding agents to manage Spec-Driven Development workflows, including specification authoring, planning, task generation, and consistency analysis.131MIT
- AlicenseNot gradedqualityBmaintenanceEnables autonomous agents to turn high-level project goals into structured user stories, verifiable Gherkin acceptance criteria, edge cases, and OpenAPI-compatible API contract skeletons through MCP tools.7MIT
- AlicenseAqualityDmaintenanceA comment-based spec-driven development MCP server that facilitates workflows from requirements creation to implementation via AI, using @spec-impl markers.52MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.