Skip to main content
Glama

Server Details

Task tracker for product teams: projects, features, tasks, bugs, team chats and code context.

Ownership verified
Status
Healthy
Uptime
88.4% over 21 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A3.6/5.0

Scored across 64 tools

Disambiguation3/5

Most tools are domain-scoped and descriptions clarify intent, but the set has a large family of overlapping '-context' and spec-sync tools (task_context, task_code_context, task_spec_sync, feature_context, feature_spec_sync, product_context, session_context, task_evaluation_context) plus multiple routes to conventions/rules. These boundaries are usually explained, but an agent must read carefully to avoid misselection.

Naming Consistency4/5

The dominant pattern is snake_case domain_action (e.g. task_create, feature_update, repo_search, chat_send), which is predictable. A few names deviate, such as create_rules and some verb-heavy compounds, but the overall convention remains readable.

Tool Count1/5

64 tools is far beyond the practical MCP range and creates substantial selection and context overhead. Although the server spans many domains, this is an extreme count for an agent-facing tool set.

Completeness4/5

Core lifecycles are extensively covered: features, tasks/bugs, chat, design comments/import, files, memory, repository reading, work queue, evaluations, and versions. Some gaps remain, such as no branch creation despite branch_list suggesting new branch names, no product creation, and limited variable/worklog write operations, but most workflows have a usable path.

Available Tools

64 tools
branch_listA
Read-only
Inspect

Lists repository branches with sha, default/protected flags and the task key from each name (taskKey); search filters by a name substring. With taskID, only that task's live branches are listed, plus suggestedName - the live branch or the server-convention name for a new one (a task has one live branch). Creates nothing.

NameRequiredDescriptionDefault
searchNoBranch name substring.
taskIDNoOnly this task's live branches, plus suggestedName.
repositoryIDYesRepository ID.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description reinforces this with 'Creates nothing.' It adds genuinely new context beyond annotations: the domain invariant that a task has one live branch, and that suggestedName is either the live branch or the server-convention name for a new one.

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

Conciseness4/5

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

Two dense, front-loaded sentences that lead with the read operation and its returned fields, then param behavior. The parenthetical asides are informative rather than filler, though the second sentence packs several clauses.

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

Completeness4/5

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

With no output schema in the definition, the description carries the return-value burden and does so by enumerating the fields returned plus the conditional suggestedName. Nothing essential to a correct call is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: it explains that suggestedName only appears alongside taskID and what that value represents. This goes beyond the schema's one-line parameter descriptions.

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

Purpose5/5

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

States a specific verb (Lists) and resource (repository branches) and names the concrete fields returned: sha, default/protected flags, and taskKey. No sibling tool covers branch enumeration, so the agent can identify this immediately.

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

Usage Guidelines4/5

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

It gives clear conditional guidance: use search to filter by name substring, and pass taskID to scope to a single task's live branches. It does not name an explicit alternative or exclusion case, so it stops short of a 5.

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

bug_createAInspect

Creates a bug as a draft when the user asks to log a defect; the draft is published separately at the user's request. Placement is one of: a feature (featureID or featureKey), a version (versionID) or the product backlog (productID); type is the criticality (the nature of the defect is the separate bugType field), and bugs always have a testing stage. Stage assignees: employee uuid, "any" (any employee) or null (no such stage; the work stage always exists). Returns the key, link, status and allowed transitions.

NameRequiredDescriptionDefault
ordNoPosition of the new bug, as ord in task edits; omitted - the end of the feature's plan.
gistYesGist: one or two sentences, "problem → solution", up to 300 characters of plain text (no Markdown, links or task keys), in the language of the workspace data.
specYesBug description in Markdown (no HTML) following the bug creation template, in the language of the workspace data.
typeYesCriticality by actual impact: bug_trivial - cosmetic; bug_minor - inconvenience with a workaround; bug_major - a function works wrong or part of a scenario is unavailable, the workaround is costly; bug_critical - a scenario is impossible, data is lost or corrupted, a section crashes; bug_block - blocks the product or all testing. In doubt between two levels - the higher one.
buildNoBuild in which the defect was reproduced, from the deployed version.
fuzzyNoIntermittent bug: does not reproduce every time.
stageNoStand where the bug was reproduced: dev - development and autotests, alpha - manual QA, prod - production data.
titleYesBug title, up to 200 characters, in the language of the workspace data.
labelsNoLabels.
browserNoBrowser where the defect was reproduced.
bugTypeNoDefect nature: ui - interface, fn - functionality, ux - usability, spec - documentation; not the severity, which is type.
devicesNoIDs of devices from the company's QA devices where the defect was reproduced.
priorityNoPriority; a human decision, set only at the user's explicit request.
featureIDNoFeature ID - the preferred placement
moduleIDsNoIDs of the modules (screens) where the defect is visible.
productIDNoProduct ID - the product backlog, last resort
versionIDNoVersion ID - when no feature fits
featureKeyNoFeature key #F12; not with featureID
componentIDsNoIDs of the components where the defect is actually visible; empty if unsure.
testAssigneeNoTester: employee UUID or "any" (default) - bugs are always tested.
workAssigneeNoAssignee; default "any".
workTimePlanNoPlanned fix time in minutes, for the assignee's role level.
rulesRevisionYesRevision of the bug creation template the spec follows.
reviewAssigneeNoReviewer; default - no review stage.
approvalAssigneeNoApprover; default - no approval stage.
workIterationDateNoA date within the work iteration, YYYY-MM-DD; defaults to the current iteration.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false and destructiveHint=false, so safety is covered 'schema-only'. The description adds real value beyond that: the bug is created as a draft and only published on request, bugs always have a testing stage, and stage assignees accept uuid/'any'/null. It also discloses the return contents (key, link, status, allowed transitions), which matters since there is no output schema.

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

Conciseness4/5

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

Front-loaded with the core create/draft behavior, then the placement and assignee nuances. It is dense but every clause carries information an agent needs for a 26-parameter tool; a slightly more structured list of the placement options would help, but there is little waste.

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

Completeness4/5

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

For a 26-parameter creation tool with no output schema, the description covers the important missing pieces: draft lifecycle, placement rules, assignee semantics, and the returned key/link/status/transitions. Remaining gaps (auth needs, validation errors) are minor given the very detailed schema.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds cross-field interpretation the schema alone leaves implicit: type is criticality, not the nature of the defect (bugType), and placement is a choice among feature/version/product backlog. These distinctions reduce mis-set parameters, though most per-field detail still lives in the schema.

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

Purpose5/5

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

States a specific verb and resource ('Creates a bug') and immediately qualifies it with the draft lifecycle ('as a draft... published separately'), which distinguishes it from a publish operation like task_publish. It also enumerates the placement options and clarifies the type/bugType split, so an agent can tell what the tool does without opening the schema.

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

Usage Guidelines4/5

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

Gives clear trigger context ('when the user asks to log a defect') and priority guidance for placement: feature is the 'preferred' option, version is 'when no feature fits', and product backlog is the 'last resort'. It does not name sibling tools to avoid, but the placement ordering and draft-vs-publish wording cover the main selection decisions.

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

chat_message_deleteA
Destructive
Inspect

Deletes a chat message. Irreversible: the token owner can delete their own message within 60 minutes, chat administrators and the product lead any message. Intended for an explicit user request to remove an unneeded message (duplicate, wrong chat).

NameRequiredDescriptionDefault
messageIDYesMessage ID

TDQS

A4.3/5.0
Behavior5/5

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

Goes well beyond the destructiveHint=true annotation by disclosing irreversibility and precise authorization rules: token owners can delete their own message within 60 minutes, while chat administrators and the product lead can delete any message. This time window and permission model is exactly the context an agent needs before invoking a destructive tool.

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

Conciseness5/5

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

Two tight sentences: the action first, then the safety/permission context and the intended-use condition. Zero filler and every clause earns its place.

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

Completeness5/5

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

For a destructive single-parameter tool with annotations covering the safety profile and no output schema, the description supplies the missing pieces: irreversibility, permission tiers, and the triggering user intent. Nothing essential to correct invocation is absent.

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

Parameters3/5

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

There is a single parameter with 100% schema description coverage, so the schema already carries the semantics of messageID. The description adds no format, scope, or ID-source detail beyond what the schema provides, making the baseline 3 appropriate.

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

Purpose4/5

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

States a specific verb and resource ('Deletes a chat message'), which cleanly separates it from chat_message_update and chat_read. It stops short of explicitly naming the sibling it is not, 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.

Usage Guidelines4/5

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

Gives an explicit condition for use ('an explicit user request to remove an unneeded message') with concrete examples (duplicate, wrong chat). No named alternative such as chat_message_update is offered for the edit-vs-delete decision, so it lacks exclusions.

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

chat_message_updateA
Destructive
Inspect

Edits the token owner's own regular message within 60 minutes of sending: text replaces the old one, mentions are recalculated from mention tokens, passed attachments replace the old ones ([] removes all). The chat shows an "edited" mark; later corrections go as a reply to the original.

NameRequiredDescriptionDefault
textYesFull new text (Markdown), in the language of the workspace data
messageIDYesMessage ID
attachmentsNoNew attachment set, up to 5; replaces the old one entirely

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond the destructiveHint=true annotation: it discloses the 60-minute window, the ownership requirement, that mentions are recalculated from mention tokens, that attachments are wholly replaced (and [] clears them), and that an 'edited' mark appears. This is rich behavioral context an agent needs before invoking a mutation.

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

Conciseness5/5

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

Two dense sentences, front-loaded with the action and its hard constraint; every clause (timing, ownership, mentions, attachments, edited mark, late-correction routing) carries distinct information with no padding.

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

Completeness5/5

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

For a destructive mutation with annotations already flagging the safety profile, the description covers eligibility, timing, replacement semantics, and visible side effects. No output schema is needed for an edit confirmation, so nothing material is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: text fully replaces the prior text, mentions are recomputed, and attachments replace rather than append, with [] as the explicit clear-all value. That clarifies the replace-vs-append semantics the schema alone leaves ambiguous.

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

Purpose5/5

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

States a specific verb (Edits) and resource (the token owner's own regular message), and the qualifiers 'own' and 'regular' distinguish it from chat_send, chat_message_delete, and other chat siblings. An agent can identify the operation without opening the schema.

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

Usage Guidelines4/5

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

Gives concrete conditions for use: the message must be the token owner's own, and edits are only valid within 60 minutes of sending. It also implicitly routes late corrections to a reply. It does not name sibling tools as alternatives, but the when/when-not constraints are clear.

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

chat_question_inboxA
Read-only
Inspect

Returns messages addressed to the token owner (direct chat, mention, reply to their message) still without their answer, regardless of age: chat and link, why it is addressed, the related item, the message with attachments. Useful when the user asks what awaits their reply; pages continue with nextCursor while hasMore.

NameRequiredDescriptionDefault
limitNoPage size, 1-100 (default 20)
cursorNoPrevious page's nextCursor, as is

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly/openWorld=false and non-destructive, so safety is covered. The description goes further by disclosing the selection rule ('still without their answer, regardless of age') and the pagination contract ('pages continue with nextCursor while hasMore'), which the annotations cannot express.

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

Conciseness4/5

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

Front-loaded with the core behavior and kept to two sentences with no filler. The enumeration of returned fields is slightly dense, but every clause carries information rather than restating the name.

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

Completeness4/5

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

With no output schema, the description responsibly enumerates the return payload (chat and link, why it is addressed, related item, message with attachments) and the pagination contract. For a read-only, two-parameter list tool this covers what an agent needs, missing only explicit sibling routing.

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

Parameters4/5

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

Schema description coverage is 100%, so both parameters are already documented and the baseline is 3. The description adds genuine meaning by stating that pages continue via nextCursor while hasMore, tying the cursor/limit pair to a concrete continuation condition the schema does not state.

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

Purpose4/5

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

States a specific verb and resource: returns messages addressed to the token owner that are still unanswered, with the addressing reason (direct chat, mention, reply). It is clearly distinguishable from chat_read or chat_send, though it never names a sibling to sharpen the contrast.

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

Usage Guidelines4/5

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

Gives an explicit trigger condition: 'Useful when the user asks what awaits their reply.' That is clear usage context, but there is no when-not guidance and no named alternative (e.g. chat_read) for unanswered vs. all messages.

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

chat_reactionAInspect

Adds or removes the token owner's reaction to a chat message - a textless reply. Only Kosmodrom web reactions are available (meanings in reaction); an existing reaction is not added twice, system messages take no reactions, and message reactions are keyed by who added them.

NameRequiredDescriptionDefault
removeNotrue - remove the token owner's reaction
reactionYesthumbs-up - 👍 agree, accepted; thumbs-down - 👎 disagree; ok - 👌 got it, will do; handshake - 🤝 agreed (deal); hands-folded - 🙏 thanks; 100p - 💯 fully agree; face-smile - 🙂 glad; face-lol - 😂 funny; face-thinking - 🤔 need to think, doubtful; face-grimacing - 😬 awkward; face-screaming - 😱 alarm; face-angry - 😠 displeased; fire - 🔥 excellent; eyes - 👀 looking, taking a look; call - 📞 let's have a call; lady-bug - 🐞 this is a bug; crutch - hack, temporary workaround; no-bicycles - don't reinvent the wheel, use an existing solution
messageIDYesMessage ID

TDQS

A3.6/5.0
Behavior4/5

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

Annotations provide readOnlyHint=false, destructiveHint=false, and openWorldHint=false, which already tells the agent this is a non-destructive write. The description adds important behavioral context: only Kosmodrom web reactions are available, existing reactions are not duplicated, system messages take no reactions, and reactions are keyed by user. However, it doesn't disclose any auth/permission requirements 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.

Conciseness4/5

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

The description is a single, well-structured sentence that front-loads the core action and then adds constraints. It is appropriately sized and every clause adds value, though it could be slightly more organized with separators.

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

Completeness3/5

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

For a mutation tool with annotations covering safety and a 100%-covered schema, the description covers key behaviors like idempotency (existing reaction not added twice) and system message exclusion. However, it omits auth requirements, permission scope, and any side effects beyond the keying mechanism, leaving some contextual gaps.

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

Parameters3/5

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

Schema description coverage is 100% and the schema fully documents the 'reaction' enum with meanings and the 'remove' boolean. The description adds only that 'meanings in reaction', which is redundant with the schema. Since the schema already does the heavy lifting, baseline 3 is appropriate.

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

Purpose4/5

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

The description uses a clear verb+resource: 'Adds or removes the token owner's reaction to a chat message - a textless reply.' This distinguishes it from siblings like chat_send or chat_read, though it doesn't 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.

Usage Guidelines3/5

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

Usage is implied by 'Adds or removes' and the mention of system messages taking no reactions, but there is no explicit guidance on when to use this versus other chat tools like chat_send or chat_read.

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

chat_readA
Read-only
Inspect

Returns chat messages from a cursor, oldest to newest; without a cursor - the latest ones. hasMore tells whether more messages exist in the requested direction; an after cursor returns newer messages, such as replies to a sent one. A task chat without messages yet returns an empty page. Each attachment has attachToken, which can be inserted into a spec / result as is.

NameRequiredDescriptionDefault
afterNoThe after cursor from a response: newer messages.
limitNoMessages to return, 1-100 (default 30)
beforeNoThe before cursor from a response: older messages.
chatIDYesChat ID; for a task's chat - the task ID

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, openWorldHint=false and destructiveHint=false, so the safety profile is covered. The description adds genuine behavioral detail beyond that: hasMore signals direction of remaining messages, an empty page is the valid result for a task chat with no messages, and attachments carry an attachToken that can be reused in a spec/result.

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

Conciseness4/5

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

A single dense paragraph, front-loaded with the core behavior and direction semantics, with no filler sentences. It is slightly run-on, packing pagination, empty-page, and attachToken facts into one block, but every clause earns its place.

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

Completeness4/5

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

With no output schema, the description usefully previews return semantics (hasMore, empty page, attachToken) for a cursor-paginated read tool. Given the read-only annotations and full schema coverage, an agent has everything needed to call it correctly; only the exact response shape is unspecified.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description nonetheless adds meaning by explaining that cursors come from a previous response and encode direction (after = newer, before = older). The limit and chatID parameters are left entirely to the schema, so it does not fully compensate beyond the baseline.

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

Purpose4/5

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

The description states a specific verb and resource ('Returns chat messages') and defines the scope precisely via cursor semantics (oldest-to-newest with a cursor, latest without). It is clearly distinguishable from the mutation siblings (chat_send, chat_message_delete, chat_message_update) by its read behavior, though it never names an alternative explicitly.

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

Usage Guidelines4/5

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

It gives concrete conditions for each mode: no cursor returns the latest messages, an after cursor returns newer messages (e.g. replies to a sent one), and a before cursor returns older messages. That is clear usage context for pagination, but it offers no when-not-to-use or sibling routing guidance.

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

chat_sendAInspect

Sends a message on behalf of the token owner to a chat (a task's chat ID is the task ID) or, with userID, a direct message to an employee; replyMessageID makes it a reply. Intended for blocking questions, replies to messages addressed to the token owner and messages the user asks for - not for status updates, summaries or links to created items. Messages newer than the last read (the after cursor) may already hold the same question or its answer. Returns chatID, the message and an after cursor; the message can be edited or deleted within 60 minutes.

NameRequiredDescriptionDefault
textYesMessage in the language of the workspace data: Markdown without headings, tables or images; bare URLs become links. Tasks and features go in as their link value, employees as their mention token where addressed
chatIDNoChat ID; for a task's chat - the task ID, for the company's general chat - the company ID
userIDNoEmployee ID for a direct message, instead of chatID
attachmentsNoUp to 5 attachments: each is an uploaded file's fid or name with dataBase64
idempotencyKeyNoRetry-safety key: one key per chat yields one message
replyMessageIDNoID of the message in this chat to reply to

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly=false and destructive=false. The description goes beyond them by disclosing the return payload (chatID, message, after cursor) and that the sent message can be edited or deleted within 60 minutes, plus the duplicate-risk caveat around the after cursor. It does not state permission requirements or rate limits, so it stops short of a 5.

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

Conciseness5/5

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

Five dense sentences with zero filler: addressing modes first, then when-to-use and when-not, then the dedup caveat, then the return value and edit window. Front-loaded and each sentence carries distinct information.

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

Completeness5/5

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

With no output schema, the description supplies the return shape itself. Combined with addressing semantics, usage boundaries, dedup guidance and the edit/delete window, an agent has everything needed to invoke this correctly against siblings like chat_read or chat_message_update.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter including text formatting rules, attachment limits and idempotencyKey is already documented. The description restates chatID/userID/replyMessageID semantics, which largely duplicates the schema rather than adding new meaning, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb (sends) and resource (message) and immediately distinguishes the three addressing modes: chatID for a chat (task chat ID = task ID), userID for a DM, replyMessageID for a reply. An agent can tell exactly what this does and how it differs from chat_read, chat_reaction and chat_message_update.

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

Usage Guidelines5/5

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

Explicitly names the intended cases (blocking questions, replies to messages addressed to the token owner, messages the user asks for) and the excluded cases (status updates, summaries, links to created items). It also warns that messages newer than the last read may already contain the same question or answer, which steers the agent to check chat_read before sending.

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

component_updateA
Destructive
Inspect

Creates a product component (without componentID; productID and title are required) or updates a component's name and description, or removes its main Figma frame; omitted fields stay unchanged, module membership is not affected. Only at the user's request or with their consent: the product structure belongs to the team.

NameRequiredDescriptionDefault
descNoDescription, Markdown
titleNoName
designNonull - remove the component's main Figma frame
productIDNoProduct ID of a new component
componentIDNoComponent ID; omitted - a new component

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered structurally. The description adds real value on top: omitted fields stay unchanged (PATCH semantics), module membership is unaffected, and it names what gets destroyed (the main Figma frame). It does not discuss reversibility or response shape, 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.

Conciseness4/5

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

Dense but front-loaded: the create/update/remove branching comes first, then the invariants, then the consent caveat. Each clause carries information. Slightly heavy as a single sentence but nothing is wasted.

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

Completeness4/5

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

For a multi-mode mutation tool with no output schema, the description covers the branching logic, side effects (frame removal, unchanged omitted fields, module membership), and the consent guardrail. What it omits is authorization mechanics and whether the frame removal is reversible, which would be the last gaps.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning beyond the schema by explaining parameter interaction: omitting componentID creates a new component requiring productID and title, while supplying it triggers an update. This conditional logic is not obvious from the flat schema alone.

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

Purpose5/5

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

The description states a specific verb+resource ('Creates a product component', 'updates a component's name and description', 'removes its main Figma frame') and spells out the branching condition that selects each mode. An agent can distinguish this from sibling module_update or product_update purely from the text.

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

Usage Guidelines4/5

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

It gives an explicit precondition for use ('Only at the user's request or with their consent: the product structure belongs to the team'), which is strong when-to-use guidance. It does not name alternative tools or state when-not to use it, so it stops short of a 5.

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

create_rulesA
Read-only
Inspect

Returns the workspace's conventions and description template for a new feature, task or bug (content) and the template revision (rulesRevision) that creation requests carry. For a task, the template depends on its work type.

NameRequiredDescriptionDefault
entityYesWhat is being created: feature, task or bug.
taskTypeNoThe task's work type; required when entity is "task", not passed for feature and bug.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=false, destructiveHint=false, matching the 'Returns' verb, so the safety profile is covered. The description adds that the response carries both 'content' and 'rulesRevision', which is genuinely useful given there is no output schema. It stops short of noting auth needs or any other behavioral trait, so it lands at a solid-but-not-rich 3.

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

Conciseness4/5

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

Effectively two sentences, front-loaded with the core verb and resource, with no filler or marketing prose. The parentheticals ('(content)', '(rulesRevision)') are dense but each carries information. Slightly run-on syntax keeps it from a 5.

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

Completeness4/5

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

With no output schema, the description correctly compensates by naming the returned fields (content, rulesRevision). Both parameters are fully documented in the schema, and the task/work-type dependency is captured. What remains missing is explicit routing to the create tools this precedes, but the essentials for correct invocation are present.

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

Parameters4/5

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

Schema description coverage is already 100%, which sets the baseline at 3, but the description goes further by stating the conditional relationship: 'For a task, the template depends on its work type.' This explains why taskType matters and why it is required only when entity is 'task', adding rationale beyond the schema's bare 'required when entity is task' note.

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

Purpose4/5

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

The description uses a specific verb ('Returns') and names the concrete resources: the workspace's conventions and description template plus its revision (rulesRevision). It is distinguishable from siblings like feature_create/task_create because the description makes clear this fetches the rules rather than creating anything. The nested phrasing ('for a new feature, task or bug (content)...') is slightly hard to parse, and the tool name 'create_rules' implies a mutation, which the description must and does correct.

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

Usage Guidelines3/5

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

Usage is only implied: the phrase 'that creation requests carry' hints this is called before a create call, but the description never explicitly states when to use it versus siblings or names the alternative tool. No exclusions or prerequisites are given. An agent can infer the context but must do so itself.

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

currency_convertA
Read-only
Inspect

Converts an amount between RUB, USD, EUR and CNY at the Bank of Russia rate for a date: non-business days use the last business day's rate, cross rates go via RUB, dates after tomorrow are rejected. Returns rate (units of to per 1 from) and result (the amount in to, 2 decimals).

NameRequiredDescriptionDefault
toYesTarget currency
dateNoRate date, YYYY-MM-DD; defaults to today in the company's time zone
fromYesCurrency of the amount
amountYesAmount in the from currency

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered; the description goes well beyond that with the rate source, the non-business-day fallback, the RUB-based cross-rate path, and an explicit rejection rule for future dates. It also discloses the return payload (rate and result rounded to 2 decimals), which is exactly the kind of behavioral detail annotations cannot express.

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

Conciseness5/5

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

Two sentences, front-loaded with the action and rate source, then a compact second sentence handling edge cases and the return shape. Every clause carries information — the fallback, cross-rate path, rejection rule, and rounding all matter to a caller.

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

Completeness5/5

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

With no output schema, the description correctly takes on the burden of describing the return values (rate as units of to per 1 from, result rounded to 2 decimals), and it covers the tricky behavioral edges an agent would otherwise have to discover by trial. Nothing needed to call or interpret this tool is missing.

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

Parameters3/5

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

Schema description coverage is 100% and documents all four parameters, including the date default ('defaults to today in the company's time zone'), so the baseline is 3. The description clarifies the direction convention ('units of to per 1 from'), which helps interpret amount/from/to, but adds no syntax, format, or validation detail for the parameters themselves.

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

Purpose5/5

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

The description gives a precise verb+resource ('Converts an amount between RUB, USD, EUR and CNY') and immediately pins down the scope: the Bank of Russia rate, the supported currency set, and the date basis. No sibling tool in the list does currency conversion, so there is no ambiguity to resolve and the purpose is fully self-contained.

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

Usage Guidelines4/5

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

It supplies concrete usage conditions rather than leaving them to inference: non-business days fall back to the last business day's rate, cross rates route through RUB, and dates beyond tomorrow are rejected. It does not name alternatives or a 'when not to use', but no plausible alternative tool exists in this toolset, so the omission is minor.

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

design_comment_replyAInspect

Replies in a Figma comment thread through the company's integration, visible to everyone with access to the file; the server adds an "employee and agent" signature. Source: url or designID; commentID - the thread or a reply in it. Suitable when a remark is fixed or the answer is unambiguous; disputed points are left to the user.

NameRequiredDescriptionDefault
urlNoFigma link to the file, page or frame with the thread
messageYesReply in the language of the workspace data, up to 4000 characters: what was fixed and where; the server adds the signature
designIDNoImported design ID, instead of url
commentIDYesThread ID (thread.ID) or a reply ID in it

TDQS

A4/5.0
Behavior4/5

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

Annotations only declare the generic profile (readOnly=false, destructive=false, openWorld=false), so the description usefully adds that the reply is "visible to everyone with access to the file" and that the server appends an "employee and agent" signature. These are non-obvious side effects that shape whether an agent should post. It does not say what the call returns or how failures surface.

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

Conciseness4/5

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

Three compact clauses, front-loaded with the action and visibility, then sourcing, then the suitability rule. Every sentence carries information, though the sourcing clause reads as telegraphic shorthand.

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

Completeness4/5

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

For a mutation tool with no output schema, it covers visibility, the signature side effect, language/length expectations and when to refrain. The main gap is return behavior (e.g., the new reply's ID) and error handling, which an agent posting into a shared thread might want.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real semantics: "Source: url or designID" clarifies these two are alternative locators for the same thing, and commentID may be "the thread or a reply in it". That resolves ambiguity the schema alone leaves open.

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

Purpose4/5

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

The description opens with a specific verb and resource ("Replies in a Figma comment thread") and scopes the channel ("through the company's integration"). It is clear what the tool does, but it never names or contrasts with the obvious sibling design_comments, so an agent must infer the read-vs-write split itself.

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

Usage Guidelines4/5

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

It gives an explicit positive condition ("Suitable when a remark is fixed or the answer is unambiguous") and a negative one ("disputed points are left to the user"), which is real routing guidance. It stops short of naming an alternative tool to use for the disputed case, so it is clear context rather than a full when/when-not/alternative map.

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

design_commentsA
Read-only
Inspect

Returns Figma design comments through the company's integration: threads with author, date, text, replies and pinned node. Source: url (a frame or page returns threads inside it, a file - all) or designID of an imported design; author.isIntegration marks replies already sent via Kosmodrom. A later reply may cancel a remark; the Figma API cannot mark threads resolved.

NameRequiredDescriptionDefault
urlNoFigma link to a file, page or frame
statusNoopen - unresolved threads only (default); all - including resolved
designIDNoImported design ID: a designs key or the uuid in design:<uuid>

TDQS

A3.7/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true and destructiveHint=false, lowering the bar, and the description still adds real behavior: author.isIntegration flags already-sent replies, a later reply may cancel a remark, and the Figma API cannot mark threads resolved. The last point is a genuinely useful capability limitation. It does not describe pagination or response shape, so it is good but not exceptional.

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

Conciseness4/5

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

Three dense sentences, front-loaded with purpose then source semantics then behavioral caveats. No filler. The middle clauses are slightly compressed but every sentence carries information.

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

Completeness4/5

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

For a read-only list tool with no output schema, the description covers purpose, source options, integration markers, and a key API limitation. It omits return ordering/pagination and does not explicitly route to design_comment_reply, so it is complete-ish but not fully self-sufficient.

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

Parameters3/5

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

Schema coverage is 100%, so all three parameters (url, status, designID) are already documented in the schema. The description adds scoping semantics (frame/page returns threads inside it, file returns all; designs key or design:<uuid> form), which is a modest value-add over the schema. Baseline 3 is appropriate when the schema does the heavy lifting.

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

Purpose4/5

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

States a specific verb+resource: 'Returns Figma design comments', enumerated as threads with author, date, text, replies, pinned node. Clear what it does. It does not explicitly name or contrast with its closest sibling design_comment_reply or design_import, so it stops short of full sibling differentiation.

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

Usage Guidelines3/5

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

Usage is implied by the source semantics (url vs designID) but the description never says when to use this versus design_comment_reply or design_import. An agent must infer that this is the read tool and design_comment_reply the write tool.

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

design_importAInspect

Imports Figma frames into a task, bug or feature through the company's Figma integration, like pasting a design in the web app (snapshot, layers, assets): one entity, up to 10 frame links with node-id per request, large frames 2-3 per request to stay within client timeouts (after a timeout the import keeps running on the server; the entity's designs, by nodeID with ":" such as 12:34, show what was imported within 1-2 minutes); a failed frame does not stop the others. Per frame returns status (imported, updated, unchanged, linked - linked but not refreshed, error), designID and a designToken marker, or error with action - how to fix it; the designToken in an entity's spec or result holds the link to the design, and the same marker in another entity of the product links it there on save. moduleID / componentID (product:structure privilege) set the module's or component's main frame (one frame, no marker); re-import refreshes the snapshot and keeps markers.

NameRequiredDescriptionDefault
framesYesFrames to import
taskIDNoTask or bug ID
taskKeyNoTask or bug number, when the ID is unknown
moduleIDNoModule ID - its main frame (one frame)
featureIDNoFeature ID
featureKeyNoFeature key #F12; not with featureID
componentIDNoComponent ID - its main frame (one frame)

TDQS

A4.5/5.0
Behavior5/5

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

Goes well beyond the annotations (which only declare non-read-only, non-destructive, open-world). It discloses timeout-and-continue-server-side behavior, partial failure semantics ('a failed frame does not stop the others'), the 1-2 minute delay before designs appear, re-import refresh behavior, and the marker/designToken linkage side effect.

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

Conciseness3/5

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

The core purpose is front-loaded, but the body is a single dense, semicolon-chained block with nested parentheticals that is hard to scan. Every claim is substantive, yet it would benefit from structuring into distinct clauses or a short list.

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

Completeness5/5

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

Despite having no output schema, the description documents the return contract per frame (status values, designID, designToken marker, error with an action for fixing). Paired with complete parameter coverage, an agent has everything needed to call and interpret the tool.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description genuinely adds meaning: nodeID format with ':' (e.g. 12:34), moduleID/componentID setting a main frame with one frame and no marker, and the rule that a designToken in one entity links another entity on save.

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

Purpose5/5

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

States a specific verb and resource ('Imports Figma frames') plus the target entities (task, bug, feature) and the integration it goes through. No sibling tool does this, and the agent can distinguish it immediately even without opening the schema.

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

Usage Guidelines4/5

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

Gives clear operational context: 'like pasting a design in the web app', batching guidance (up to 10 links; 2-3 large frames to stay within client timeouts), and the moduleID/componentID single-frame special case. It stops short of naming when NOT to use it or pointing to an alternative sibling, so it lands at 4 rather than 5.

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

feature_code_contextA
Read-only
Inspect

Returns a feature's code: its tasks, the product's repositories, live branches and commits by task keys. Useful for checking a feature's spec against the implementation.

NameRequiredDescriptionDefault
keyNoFeature key #F12; not with featureID
featureIDNoFeature ID; not with key

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=false and destructiveHint=false, so safety is covered. The description adds that the result spans live branches and commits by task keys, which hints at an aggregation over live repo state, but says nothing about auth scope, freshness, or cost of the cross-repo lookup.

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

Conciseness4/5

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

Two sentences, front-loaded with what is returned, no filler. Slightly awkward phrasing ('a feature's code') but every clause carries content.

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

Completeness4/5

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

For a read-only tool with no output schema and fully documented parameters, the description covers what comes back well enough to invoke it. The remaining gap is disambiguation from the neighboring feature/task code-context tools, which is a routing concern rather than a call-correctness one.

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

Parameters3/5

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

Schema description coverage is 100% and both parameters are documented there, including the mutual exclusivity ('not with featureID' / 'not with key'). The description contributes nothing about key format or the alternation, so baseline 3 is correct.

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

Purpose4/5

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

States a specific verb+resource ('Returns a feature's code') and enumerates the payload (tasks, repositories, branches, commits), so the agent knows it is an aggregate code-context fetch. However it never distinguishes itself from the very similar siblings feature_context and task_code_context, leaving a real ambiguity.

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

Usage Guidelines3/5

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

'Useful for checking a feature's spec against the implementation' gives one implied scenario but no explicit when-to-use rule, no exclusions, and no alternative named. With feature_context, task_code_context and repo_context all in the sibling list, the agent gets no routing help.

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

feature_contextA
Read-only
Inspect

Returns a feature by ID or key (#F12): spec, gist, plan tasks (tasks, top to bottom by ord) and bugs as compact lines, employees (users), designs and attachments (attaches) with file IDs, and specRevision - the spec revision needed to edit the spec. Useful when the user asks about a feature, its plan or who works on it (workAssigneeID).

NameRequiredDescriptionDefault
keyNoFeature key #F12; not with featureID
featureIDNoFeature ID; not with key

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare the safe read-only, non-destructive, closed-world profile, so the bar is lower. The description adds real behavioral value beyond that: it explains that tasks/bugs come back as compact lines ordered by ord, that attachments carry file IDs, and that specRevision is 'the spec revision needed to edit the spec' – a non-obvious editing prerequisite.

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

Conciseness4/5

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

Two sentences, front-loaded with the purpose and then the return payload, with no filler. The enumeration is dense but every item earns its place by compensating for the absent output schema.

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

Completeness5/5

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

With no output schema, the description fully carries the burden of describing the return shape and does so exhaustively, while also noting the specRevision prerequisite for editing. Nothing an agent needs to call or interpret this tool correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters (key and featureID) are already documented including the '#F12' format and the mutual exclusivity. The description restates 'by ID or key (#F12)' but adds no syntax or selection guidance beyond the schema, so the baseline of 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Returns a feature by ID or key') and enumerates exactly what is returned: spec, gist, plan tasks, bugs, employees, designs, attachments, and specRevision. This clearly distinguishes it from sibling read tools like feature_list, feature_search, and feature_code_context.

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

Usage Guidelines4/5

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

Provides a concrete usage trigger: 'Useful when the user asks about a feature, its plan or who works on it (workAssigneeID).' However, it never names alternatives (e.g., feature_search or feature_list) or states when this tool should not be chosen, leaving sibling selection to inference.

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

feature_createAInspect

Creates a feature in a product version when the user asks to add one; it is visible to the team at once, with no approval step. The server creates no tasks for it: per the feature creation template, a design task follows when the modules need design, other tasks only at the user's request. Returns the feature's link, product, version, ord and specRevision.

NameRequiredDescriptionDefault
ordNoPosition in the version; features are ordered by `ord` ascending. Omitted - end of the version.
gistYesGist: one or two sentences, "problem → solution", up to 300 characters of plain text (no Markdown, links or task keys), in the language of the workspace data.
specNoFeature spec in Markdown (no HTML) following the feature creation template, in the language of the workspace data.
titleYesFeature title in the language of the workspace data, describing the user story rather than the implementation.
analyticNoFeature analyst: employee UUID or "any".
productIDYesProduct ID
versionIDNoVersion ID; omitted - the first version in development, or the backlog.
rulesRevisionYesRevision of the feature creation template the spec follows.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only declare non-readonly/non-destructive. The description adds real behavioral context beyond them: the feature is visible to the team immediately, has no approval step, and no tasks are created by the server (design task only when modules need design, others on request). It also names the return values, which is meaningful given there is no output schema.

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

Conciseness4/5

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

Three dense but front-loaded sentences covering purpose, side effects, and return values. Each sentence carries information, though the task-creation clause is a little compact and could be split for readability.

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

Completeness5/5

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

With no output schema, the description handily compensates by enumerating the returned fields (link, product, version, ord, specRevision). Combined with the side-effect disclosure and full schema coverage, an agent has everything needed to invoke it correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all eight parameters including gist, ord, spec and rulesRevision. The description adds only indirect context via 'the feature creation template', so the baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb+resource ('Creates a feature in a product version') and immediately distinguishes itself from sibling mutations like feature_update, feature_delete and feature_list. The agent can tell exactly what this does without opening the schema.

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

Usage Guidelines4/5

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

Gives a clear usage trigger ('when the user asks to add one'), which implies the when-not (not for modifying existing features). It does not explicitly name feature_update or other alternatives, so the guidance is clear but not fully routing.

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

feature_deleteA
Destructive
Inspect

Deletes a feature with all its tasks and bugs (soft cascading deletion, no restore). Irreversible; only at the user's explicit request. Returns deletedTasks, the number of tasks and bugs deleted.

NameRequiredDescriptionDefault
featureIDYesFeature ID.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true, but the description goes further: it discloses that deletion cascades to tasks and bugs, that it is a soft delete with no restore path, and that the response reports deletedTasks. This is exactly the behavioral context an agent needs before firing an irreversible operation.

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

Conciseness5/5

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

Three compact clauses, each doing work — action, irreversibility precondition, return value — with the destructive scope front-loaded. No filler.

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

Completeness5/5

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

For a one-parameter destructive tool with no output schema, the description covers cascade scope, irreversibility, the calling precondition, and the return field. Nothing an agent needs in order to call it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100% and there is a single parameter (featureID) whose type is documented as a UUID, so the schema carries the burden. The description adds no format or semantic detail about the identifier, making the baseline 3 appropriate.

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

Purpose5/5

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

States a specific verb (deletes) and resource (feature) plus the cascade scope (all its tasks and bugs), which singles it out from siblings like feature_update, task_delete and task_relation_delete. An agent can distinguish it without opening any schema.

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

Usage Guidelines4/5

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

Gives an explicit gating condition — 'only at the user's explicit request' — which is real usage guidance for a destructive tool. It does not name an alternative (e.g., feature_update for non-destructive changes), 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.

feature_listA
Read-only
Inspect

Lists the features of a product or one version in the web order (ord ascending), for an overview of what a product contains. spec and specRevision come only with includeSpec (much larger response), completed features only with allowDone; the next page is requested with nextCursor and the same parameters.

NameRequiredDescriptionDefault
limitNoFeatures per page, up to 200 (default 50).
cursorNonextCursor of the previous page of the same request.
allowDoneNoInclude completed features; default false
productIDYesProduct ID
versionIDNoVersion ID; omitted - all versions.
includeSpecNotrue - include each feature's spec and specRevision; default false.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, non-destructive, closed-world), so the bar is lower; the description still adds real behavioral context: results are in `ord` ascending, includeSpec yields a much larger response, allowDone gates completed features, and paging reuses nextCursor with the same parameters. That is meaningful disclosure beyond the annotations.

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

Conciseness4/5

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

Two dense sentences that lead with what the tool returns, then layer the optional parameters and paging. No filler; slightly clause-heavy but every clause carries information.

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

Completeness4/5

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

For a read-only paginated list with full schema coverage and annotations handling safety, the description covers ordering, filtering flags, response-size tradeoff, and pagination. Only the sibling-routing question (vs feature_search) remains open.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds cross-parameter semantics the schema lacks: the coupling of includeSpec to spec/specRevision with a size warning, the allowDone filter effect, and the requirement that the next page use nextCursor *with the same parameters*.

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

Purpose4/5

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

States a specific verb (Lists) and resource (features of a product or one version), plus the web-order sorting (`ord` ascending), which immediately tells an agent what this returns. It does not name the closest sibling (feature_search) as the alternative, so an agent must infer the split between a paginated overview and a search.

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

Usage Guidelines3/5

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

"for an overview of what a product contains" implies the browse/overview use case, and the includeSpec/allowDone notes hint at when responses balloon. But there is no explicit when-to-use vs feature_search, no prerequisites, and no stated exclusions.

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

feature_spec_syncA
Read-only
Inspect

Returns the context for updating a feature's spec from its tasks: feature.spec, tasks[].spec and tasks[].result in one batch plus the workspace's spec-update guidelines (instructions); writes nothing. includeTaskIDs adds full contexts with chats of tasks with discrepancies. mode=analyze - differences and a full new version without saving; mode=apply - when the user asks to apply the update.

NameRequiredDescriptionDefault
keyNoFeature key #F12; not with featureID
modeYesanalyze - propose without saving; apply - the user asks to apply
basisNoactual (default) - actual state from the tasks; requirements - confirmed in chats
chatLimitNoLatest messages per full context, 1-100; older ones are read from the chat with a before cursor.
featureIDNoFeature ID; not with key
taskTypesNoTask and bug types to include; default frontend, backend, fullstack, design
includeTaskIDsNoTasks with discrepancies to add with full context and chat, up to 20; requires taskTypes, the same as in the previous response

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description reinforces this with 'writes nothing' — important because an 'apply' mode would otherwise read as a mutation. It also discloses that includeTaskIDs pulls full contexts with chats and that older chat messages are read via a cursor, which annotations do not cover.

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

Conciseness4/5

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

The purpose is front-loaded in the first clause and the text is information-dense with no filler. It is a single run-on block of semicolon-separated clauses, which costs some readability, but almost every clause carries distinct content.

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

Completeness4/5

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

With 7 parameters at full schema coverage, a read-only profile already defined by annotations, and no output schema, the description supplies what is missing: return contents, the no-write guarantee, and mode semantics. Only the sibling-vs-sibling routing (task_spec_sync) is left implicit.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description largely restates the schema's own wording for mode and includeTaskIDs ('full contexts with chats of tasks with discrepancies') rather than adding new format or interaction detail; basis and chatLimit get no description-side elaboration.

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

Purpose5/5

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

Specific verb and resource: it 'Returns the context for updating a feature's spec from its tasks' and enumerates exactly what comes back (feature.spec, tasks[].spec, tasks[].result, guidelines). The phrase 'writes nothing' pins down the operation type and separates it from task_spec_sync and feature_update.

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

Usage Guidelines4/5

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

Mode selection is spelled out: 'mode=analyze - differences and a full new version without saving; mode=apply - when the user asks to apply the update.' This gives a clear trigger for each mode, though it never names the obvious alternative (task_spec_sync) or states when not to reach for this tool.

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

feature_updateA
Destructive
Inspect

Updates a feature's title, spec, gist, version (moves it), analyst or position (ord) at the user's request; only passed fields change. Changes shared team data; feature status transitions remain a human decision, not available here. Returns the link, product, version, ord, specRevision and changed fields.

NameRequiredDescriptionDefault
keyNoFeature key #F12; not with featureID
ordNoPosition in the version, as drag-and-drop in the web UI; features go by `ord` ascending (tasks the opposite): a value between two neighbours' ord goes between them, below the smallest - first, 0 - end of the version. Neighbours closer than 100 - the version, closed included, is renumbered top down in steps of +10000, the last one at Date.now().
gistNoGist: one or two sentences, "problem → solution", up to 300 characters of plain text (no Markdown, links or task keys), in the language of the workspace data; an empty string clears it.
specNoNew spec in Markdown (no HTML), in the language of the workspace data. Replaces the whole field: existing text, `::: doc` sections and `attach:`, `design:`, `color:` tokens stay only if included.
titleNoNew name
analyticNoNew feature analyst: employee UUID or "any".
featureIDNoFeature ID; not with key
specPatchNoPart of the spec, ops in order: replace / insertBefore / insertAfter / delete a section by heading ("## Chat"; text - whole section), append, find an exact unique fragment → replace. With expectedSpecRevision.
versionIDNoVersion ID to move the feature to.
designUnlinkNotrue - the new spec may drop design markers (`design:`), and designs left unlinked are deleted; otherwise losing a marker is rejected.
expectedSpecRevisionNoThe feature's current specRevision; required when spec or specPatch changes. A spec with a revision goes in a separate request, with only gist and designUnlink alongside.

TDQS

A4.7/5.0
Behavior5/5

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

It goes beyond the structured data to provide critical behavioral constraints, such as stating that it 'Changes shared team data' and explicitly detailing the 'only passed fields change' operational behavior.

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

Conciseness4/5

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

Although slightly long, the description is highly efficient, front-loading the list of updates and immediately clarifying operational boundaries to prevent misinvocation.

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

Completeness5/5

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

Given the complexity (11 parameters, partial update logic, movement, and spec patching), the description is complete. It covers the 'what' and the 'how' of the update process.

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

Parameters5/5

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

While schema coverage is 100%, the description provides highly specific domain knowledge for complex parameters like 'ord' (position logic) and 'spec' (Markdown replacement rules), adding significant value that cannot be inferred from the JSON schema alone.

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

Purpose5/5

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

The description provides an exhaustive list of all supported updateable attributes (title, spec, gist, version, analyst, position), making the tool's scope perfectly clear.

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

Usage Guidelines4/5

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

It clearly defines the 'only passed fields change' partial update behavior, distinguishing it from a full replacement. It also explicitly states a limitation: feature status transitions are not handled by this tool.

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

feed_work_queueA
Read-only
Inspect

Returns a person's queue in a product (the token owner's or userID's), grouped by the stages where they are the assignee of the current stage: approval, work, review, testing. Within a group a task already in progress (state work) comes first, then urgent bugs, urgent tasks, bugs and tasks. includePool adds pool - the shared "any" pool for work, review and testing matched to the person's role and level; in the token owner's own queue it lists only tasks they can take. Useful when the user asks what to work on next.

NameRequiredDescriptionDefault
userIDNoWhose queue to show (employee ID); defaults to the token owner.
statusesNoOnly these groups; defaults to all.
productIDYesProduct ID
includePoolNoAdd the shared "any" pool (pool); default false.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, openWorldHint=false and destructiveHint=false, so safety is covered. The description adds real behavioral detail beyond that: the group ordering rules (in-progress first, then urgent bugs/tasks, then bugs/tasks) and the non-obvious pool semantics for the token owner's own queue. It does not cover pagination or result caps.

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

Conciseness4/5

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

Front-loaded with the core return shape and grouping before the pool caveat, and every clause carries information. The includePool sentence is a long run-on that packs several conditions together, costing some readability.

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

Completeness4/5

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

No output schema exists, but the description explains the grouping, ordering and pool composition, which is essentially what the agent needs to interpret results. A read-only list tool with annotations covering safety is adequately specified; only pagination/size limits are unaddressed.

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

Parameters4/5

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

Schema coverage is 100%, so a baseline of 3 applies, but the description genuinely enriches it: includePool is explained as the shared "any" pool matched to role and level, and that in the token owner's own queue it lists only tasks they can take — meaning not present in the schema text. statuses and userID are only lightly reinforced.

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

Purpose5/5

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

States a specific verb and resource (returns a person's queue in a product) plus scope (token owner's or userID's) and the grouping model. It is clearly distinguishable from siblings like task_search or worklog_list because it describes the assignee-stage grouped view and pool inclusion.

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

Usage Guidelines4/5

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

Explicitly frames the trigger: "Useful when the user asks what to work on next," which tells the agent the intent-level scenario. It does not name alternatives or exclusions (e.g. vs. task_search or worklog_list), 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.

file_getA
Read-only
Inspect

Returns a file's content by fid: an image as an image, text as text, up to 5242880 bytes; larger files, video, archives and other binaries are not returned inline. A design file ID that is no longer found was replaced by a re-import; the entity's current designs have the new one. Access follows the items the file is attached to, or the token owner's own upload. An attach token without an entry in attaches means the attachment was deleted or the text copied.

NameRequiredDescriptionDefault
fidYesFile ID: an attaches key, the fid in attach:<fid> or a design file ID

TDQS

A4.2/5.0
Behavior5/5

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

With annotations already declaring readOnlyHint=true, openWorldHint=false and destructiveHint=false, the description still adds substantial context not in the structured fields: a concrete 5242880-byte inline ceiling, which content types are and are not returned inline, the access-control model, the stale-design-file-ID replacement behavior, and the deleted-attachment semantics. This is a genuine value-add beyond the annotations.

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

Conciseness4/5

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

Three dense sentences, front-loaded with the primary purpose before the constraints and edge cases. Each sentence carries information, though the last two are run-on enough that they read as a spec dump rather than cleanly parsed guidance.

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

Completeness4/5

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

With no output schema, the description correctly explains what is returned inline and what is not, plus the access and stale-ID edge cases. It is nearly complete, but it does not say whether an oversized or excluded file yields an error, a link, or empty content, and there is no pagination or streaming note.

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

Parameters4/5

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

Schema coverage is 100% and the schema already enumerates the three fid forms (attaches key, attach:<fid>, design file ID), so the baseline is 3. The description goes further by explaining the failure semantics of those forms — a design file ID that is no longer found was swapped by a re-import, and an attach token missing from attaches indicates deletion — which meaningfully extends the parameter's behavior.

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

Purpose4/5

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

The description opens with a specific verb+resource: 'Returns a file's content by fid', then narrows the scope by return mode (image as image, text as text) and size ceiling. It is distinct from file_upload and file_url in effect, but it never names or contrasts with the sibling that overlaps most (file_url), 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.

Usage Guidelines4/5

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

It gives clear operational context: access is governed by the items the file is attached to or the token owner's own upload, and an attach token with no entry in attaches means the attachment is gone. What it lacks is explicit routing against alternatives (e.g. when to use file_url instead), so it stays at clear-context rather than explicit when/when-not.

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

file_uploadAInspect

Uploads a file for attachment: attachToken goes into a task, bug or feature spec / result, fid into chat message attachments; one fid can be attached in several places. With dataBase64 (up to 2097152 bytes) the file is saved at once; without it, a file of any size up to maxSize is PUT to uploadURL (curl -T "") and the upload is then completed by a call with that fid. Files cannot be deleted through MCP.

NameRequiredDescriptionDefault
fidNofid of a URL upload whose content has been PUT - completes the upload.
nameNoFile name with extension, e.g. "screenshot.png"; the extension sets the type
dataBase64NoFile content in base64, up to 2097152 bytes; omitted for upload via URL

TDQS

A3.9/5.0
Behavior4/5

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

Annotations only cover readOnly/destructive/openWorld, so the description carries the real behavioral load and does so well: size cap (2097152 bytes), the two-phase PUT flow with a literal curl example, the need for a follow-up completion call, and the no-delete limitation. It omits permission/auth requirements and what the response contains, but the added behavioral context is substantial.

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

Conciseness4/5

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

Front-loaded with the purpose, then the two flows, then the limitation—a logical order with no filler sentences. It is a single dense paragraph with run-on clauses (multiple semicolons) that hurt scanability slightly.

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

Completeness3/5

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

For a genuinely two-phase upload tool with no output schema, the description explains the mechanics but references three variables (attachToken, uploadURL, maxSize) that appear nowhere in the schema or its own text, so an agent cannot tell how to obtain them. That missing entry point is a real gap despite otherwise rich coverage.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds relationship semantics the schema lacks: attachToken routes to task/bug/feature specs while fid routes to chat message attachments, and one fid can be attached in several places. The size and base64 details duplicate the schema rather than extend it.

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

Purpose4/5

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

States a specific verb and resource ("Uploads a file for attachment") and immediately scopes the two attachment destinations, so an agent knows this creates/stores content rather than retrieving it. It does not name the siblings it must be distinguished from (file_get, file_url), so an agent still has to infer the boundary from context.

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

Usage Guidelines4/5

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

Clearly splits the two usage modes: with dataBase64 the file is saved at once, without it any-size uploads go through a PUT to uploadURL followed by a completion call. It also states a hard exclusion ("Files cannot be deleted through MCP"). It never says where attachToken/uploadURL come from or which sibling produces them, leaving the entry condition implicit.

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

file_urlA
Read-only
Inspect

Returns a file's metadata (name, mime type, type, size, upload date and author) and a signed, time-limited download URL by fid - for video, archives, design assets and other files not returned inline; downloadURL is null where the storage has no signed links. Access follows the items the file is attached to; a design file ID no longer found was replaced by a re-import. attachToken can be inserted into a spec / result as is.

NameRequiredDescriptionDefault
fidYesFile ID: an attaches key, the fid in attach:<fid> or a design file ID

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds real behavioral context beyond that: the URL is signed and time-limited, downloadURL may be null depending on storage, access is inherited from the items the file is attached to, and attachToken can be used as-is in a spec/result. This is a meaningful disclosure layer over the safety annotations, though it doesn't cover URL lifetime values or error behavior.

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

Conciseness4/5

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

Front-loaded with the return payload, then edge cases and the attachToken note. It is dense and mostly earns its clauses, though the long single sentence with semicolons could be split for faster scanning.

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

Completeness5/5

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

No output schema exists, so the description must explain returns, and it does: the metadata fields returned, the signed download URL, and the null-downloadURL case. Combined with the access-model note, an agent has everything needed to call and interpret it.

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

Parameters3/5

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

Schema coverage is 100% and the single fid parameter is fully documented in the schema (attaches key, fid in attach:<fid>, or design file ID). The description only repeats 'by fid' without adding format or resolution semantics, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Returns a file's metadata ... and a signed, time-limited download URL by fid') and scopes the resource set ('video, archives, design assets and other files not returned inline'), which implicitly separates it from the inline-retrieval sibling file_get. An agent can pick this tool without opening either schema.

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

Usage Guidelines4/5

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

Gives clear context for when to use it (files not returned inline: video, archives, design assets) and covers key edge cases (downloadURL null where no signed links exist, design file IDs replaced by re-import). It never names file_get or file_upload explicitly as the alternative, so routing 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.

memory_createAInspect

Saves a confirmed fact, rule or recipe as an agent memory record when the user asks to keep knowledge for future agent work; secrets only at the user's direct request. The record starts personal and unverified: it applies to the token owner's agents at once, and a moderator can make it shared. level is the scope: company (Git, cloud, CI), user (personal preferences), project (stands, addresses, project infrastructure) or repository (conventions, tests, code pitfalls).

NameRequiredDescriptionDefault
jobsNoJobs the record is for; at least one for job and request, none for always.
loadYesalways - delivered with any work, short; job - with the jobs in `jobs` (prevention, silent pitfalls); request - only in the `memory` index, read by ID (symptom diagnostics, narrow areas).
textYesOne topic, 1.5-3 thousand characters (max 4,000), in the language of the workspace data: rules and facts with reasons. Author and date are record fields, no "Source" line needed.
levelYes
titleYes"<area> · <situation or symptom>: <what's inside>", up to 200 characters, in the language of the workspace data; agents judge relevance by the title in the memory index.
projectIDNoProject ID, for level = project.
productIDsNoFor level = project: the products where the record is delivered. Products of its own project: only in them (none of them listed - in all products of the project); products of other projects: in them too.
repositoryIDNoRepository ID, for level = repository.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations confirm this is a non-read-only, non-destructive, closed-world write, and the description adds genuinely new lifecycle semantics: the record starts personal and unverified, is immediately visible to the token owner's agents, and a moderator can promote it to shared. It also flags the secrets caution. It stops short of describing authorization requirements or failure modes.

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

Conciseness4/5

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

Two sentences, front-loaded with the action and the trigger, then the scope semantics. Dense but every clause carries information; the second sentence is long yet justified by four distinct scope values.

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

Completeness4/5

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

For an 8-parameter mutation tool with no output schema, the description covers purpose, trigger, visibility lifecycle and scope semantics, which is most of what an agent needs. Remaining gaps — the conditional level/ID relationships and duplicate-handling behavior — are covered by the schema or left implicit.

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

Parameters4/5

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

Schema coverage is already 88%, so the baseline is 3, but the description adds real meaning by spelling out each `level` value (company/user/project/repository with examples) even though the schema leaves `level` undescribed. It does not expand on projectID/productIDs/repositoryID conditionality beyond what the schema states.

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

Purpose5/5

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

States a specific verb and resource — 'Saves a confirmed fact, rule or recipe as an agent memory record' — and scopes it to persistent knowledge for future agent work. This clearly separates it from memory_read/memory_list/memory_update among the siblings.

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

Usage Guidelines4/5

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

Gives a clear trigger condition ('when the user asks to keep knowledge for future agent work') plus an important restriction ('secrets only at the user's direct request'). It does not name alternatives such as memory_update or create_rules, so the agent must infer when updating an existing record is preferable to creating one.

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

memory_deleteA
Destructive
Inspect

Deletes an agent memory record at the user's request: authors their own, moderators (memory:moderate) any but user-level ones. Rejected if the record changed since the given version.

NameRequiredDescriptionDefault
IDYesRecord ID.
versionYesRecord version the change is based on.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true, so irreversibility is covered. The description goes further by disclosing two behaviors annotations cannot express: the per-role authorization model and optimistic concurrency ('Rejected if the record changed since the given version').

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

Conciseness4/5

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

One dense sentence with the core action front-loaded, then permissions, then the failure condition. Effectively sized, though the colon-list construction takes a beat to parse.

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

Completeness4/5

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

With only two parameters, no output schema, and annotations carrying the safety profile, the description covers purpose, authorization and failure mode. Only a note on the success return (e.g. empty body) is absent, which is a minor gap.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description earns a bump by explaining why 'version' exists (stale-write rejection), which the schema's terse 'Record version the change is based on' does not convey.

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

Purpose5/5

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

Names a specific verb (Deletes) and resource (an agent memory record), and is immediately distinguishable from siblings memory_create/read/update/list. An agent knows exactly what this does without opening the schema.

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

Usage Guidelines4/5

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

Supplies the operative conditions for a legitimate call: authors may delete their own records, moderators (memory:moderate) may delete any but user-level records. No alternative tool is named, but for a delete operation the alternative space is self-evident.

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

memory_listA
Read-only
Inspect

Lists agent memory records visible to the user, with filters and usage statistics: deliveredCount (delivered in full), readCount (read by ID), lastUsedDT. Useful for finding duplicates before saving a record and for reviewing, moderating and cleaning up memory: with memory:moderate it covers all company records except personal ones, verified = false is the moderation queue, sort = usage with unusedDays finds rarely used records.

NameRequiredDescriptionDefault
IDsNoRecord IDs, up to 50.
jobsNoRecords for at least one of these jobs.
loadNo
sortNousage - least used first.
levelNo
queryNoSubstring of the title or text, in the language of the workspace data.
sharedNo
verifiedNofalse - unverified records (the moderation queue).
authorUIDNo
projectIDNoProject ID: memory of the project and its connected repositories.
unusedDaysNoNot delivered to or read by agents for this many days.
repositoryIDNoRepository ID.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/destructiveHint=false, and the description adds real context beyond them: the return statistics (deliveredCount, readCount, lastUsedDT) and the permission-dependent scope where memory:moderate expands coverage to all company records except personal ones.

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

Conciseness4/5

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

Front-loads the core action, then statistics, then use cases. It is dense and semicolon-heavy in the second half but every clause carries information; no filler.

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

Completeness4/5

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

With 12 params and no output schema, the description usefully names the returned statistics and explains the permission-scoped coverage, which compensates for the missing output schema. Remaining filter semantics are left to the schema, which is acceptable.

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

Parameters3/5

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

Schema coverage is 67%, and much of what the description says about verified, sort, and unusedDays restates the schema. Its incremental value is combining them ('sort = usage with unusedDays') and implying level scope, but many of the 12 parameters (IDs, jobs, load, query, shared, authorUID, projectID, repositoryID) get no semantic help.

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

Purpose5/5

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

States a specific verb and resource ('Lists agent memory records visible to the user') plus the scope of visibility, and it clearly differentiates from siblings like memory_read, memory_create, and memory_update by framing it as a filtered list with usage statistics.

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

Usage Guidelines4/5

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

Gives concrete use cases (finding duplicates before saving, reviewing, moderating, cleaning up) and conditional semantics (verified = false is the moderation queue; sort = usage with unusedDays finds rarely used records). It does not explicitly name an alternative tool to use instead, which keeps it short of a 5.

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

memory_readA
Read-only
Inspect

Returns agent memory records and MCP rules in full by ID (rules by slug, e.g. git; memory records by UUID). Useful when a record from the memory index is relevant to the user's task; unavailable IDs come in notFound.

NameRequiredDescriptionDefault
IDsYesRule slugs or memory record UUIDs - the keys of the `memory` index, up to 50.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare read-only, non-destructive, closed-world semantics, so the safety profile is covered. The description adds real behavioral value beyond that: records come back 'in full' and 'unavailable IDs come in notFound', telling the agent how partial or missing input is handled.

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

Conciseness5/5

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

Two tight sentences with zero waste. The core action and ID semantics are front-loaded, and the usage hint plus notFound behavior follow without padding.

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

Completeness4/5

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

For a single-parameter read tool with full schema coverage and annotations carrying the safety profile, the definition is essentially complete: it explains identifiers, completeness of results, and missing-ID handling. Without an output schema it could say a touch more about the return shape, but nothing needed for correct invocation is missing.

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

Parameters3/5

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

Schema coverage is 100% and the schema description already states 'Rule slugs or memory record UUIDs'. The description largely repeats this, only adding the concrete slug example `git`, so it sits at the baseline for a fully documented schema.

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

Purpose5/5

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

States a specific verb ('Returns') and its two resources (agent memory records and MCP rules), and clarifies the input shape ('in full by ID'). It is clearly distinguishable from sibling memory_list, which enumerates rather than resolves by ID.

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

Usage Guidelines3/5

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

Gives an implied usage condition ('when a record from the `memory` index is relevant to the user's task') but no explicit when-not guidance and no named alternative (e.g. memory_list for browsing). Enough to orient the agent, but routing between memory_* siblings is left to inference.

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

memory_updateA
Destructive
Inspect

Updates an agent memory record at the user's request; passed fields are replaced, and a new level, projectID or repositoryID moves it. Authors edit their own records, moderators (memory:moderate) any but user-level ones; an author's edit makes the record personal and unverified again, while a moderator's edit keeps these flags; verified and shared (shared needs verified) are a human moderator's decision. Rejected if the record changed since the given version.

NameRequiredDescriptionDefault
IDYesRecord ID.
jobsNoJobs the record is for; at least one for job and request, none for always.
loadNoalways - delivered with any work, short; job - with the jobs in `jobs` (prevention, silent pitfalls); request - only in the `memory` index, read by ID (symptom diagnostics, narrow areas).
textNoOne topic, 1.5-3 thousand characters (max 4,000), in the language of the workspace data: rules and facts with reasons. Author and date are record fields, no "Source" line needed.
levelNoNew level (moves the record).
titleNo"<area> · <situation or symptom>: <what's inside>", up to 200 characters, in the language of the workspace data; agents judge relevance by the title in the memory index.
sharedNoRequires memory:moderate: shared with all company agents (true) or personal to the author's (false).
versionYesRecord version the change is based on.
verifiedNoRequires memory:moderate: the record is verified.
projectIDNoNew project ID, for level = project.
productIDsNoAs when creating a record, the full list; [] - all products of the record's project.
repositoryIDNoNew repository ID, for level = repository.

TDQS

A4.5/5.0
Behavior5/5

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

Goes well beyond the annotations (destructiveHint/readOnlyHint) by disclosing replacement semantics, optimistic concurrency ('rejected if the record changed since the given version'), permission rules, and the side effects of an author edit (record becomes personal and unverified again) versus a moderator edit (flags retained). These are exactly the mutation consequences an agent needs before invoking a destructive tool.

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

Conciseness4/5

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

Front-loaded with the core action before branching into permission and flag-retention details, and every clause carries meaning. It is dense and semicolon-heavy, but not padded given the tool's complexity.

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

Completeness4/5

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

For a 12-parameter destructive mutation with no output schema, it covers permissions, concurrency, and flag behavior well. It omits only minor operational guidance, such as how the caller should obtain the current version or what a rejection looks like.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds update semantics the schema does not express: which fields are replaced wholesale and that setting level/projectID/repositoryID relocates the record. It still does not explain interplay such as what happens when productIDs is omitted.

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

Purpose5/5

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

States a specific verb and resource ('Updates an agent memory record') and immediately clarifies the update mode ('passed fields are replaced; a new level, projectID or repositoryID moves it'). This is clearly distinguishable from siblings memory_create, memory_delete, and memory_read.

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

Usage Guidelines4/5

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

Gives strong context for when and by whom the tool may be used, including the author-vs-moderator permission split and the memory:moderate requirement. It does not, however, explicitly route the agent to alternatives such as memory_read for fetching the current version before calling this tool.

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

module_updateA
Destructive
Inspect

Creates a product module (without moduleID; productID and title are required) or updates a module's name, description, parent or components, or removes its main Figma frame; omitted fields stay unchanged. Only at the user's request or with their consent: the product structure belongs to the team.

NameRequiredDescriptionDefault
descNoDescription, Markdown
titleNoName
designNonull - remove the module's main Figma frame
moduleIDNoModule ID; omitted - a new module
parentIDNoParent module ID; null - a root module
productIDNoProduct ID of a new module
addComponentIDsNoExisting components to add to the module
removeComponentIDsNoComponents to remove from the module

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true, but the description adds substantive behavior: partial-update semantics ('omitted fields stay unchanged'), the destructive effects (removing components, removing the main Figma frame), and a consent/permission precondition not present in annotations. It stops short of describing reversibility or what happens to child modules.

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

Conciseness4/5

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

Two tightly packed sentences with the create/update distinction and required-field rule front-loaded. The consent clause is a short, high-value second sentence, though the field enumeration after 'or updates a module's' is dense enough to read as a list dump.

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

Completeness4/5

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

For a destructive mutation tool with no output schema and a fully documented input schema, the description covers the create-vs-update branch, patch semantics, side effects, and the consent precondition. It omits permission/auth specifics and the fate of existing children, but nothing critical to correct invocation is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds genuinely new information: productID and title are required for creation (the schema reports zero required params), and it ties moduleID omission to the create path. The remaining parameter notes (design=null, parentID=null) largely restate the schema.

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

Purpose5/5

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

States two specific verbs (create/update) on a specific resource (product module) and enumerates updatable fields: name, description, parent, components, and Figma frame removal. It clearly distinguishes itself from siblings like product_update and component_update by naming the 'prime module' resource.

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

Usage Guidelines3/5

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

Provides a real usage constraint — 'Only at the user's request or with their consent' — which tells the agent when it must not act unilaterally. However, it never routes between create vs. update against alternatives such as product_update or product_modules, and it does not state the condition that selects the create branch beyond 'without moduleID'.

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

product_contextA
Read-only
Inspect

Returns a product's working context: project, spec excerpt (full spec with includeSpec), product analyst and product lead, unfinished versions with defaultVersionID (the default for new work), repositories and design files. With job, it also returns the workspace conventions and team notes for that kind of work (memoryInstructions) and the memory index of its other notes (ID → title), as reference; notes for other kinds of work are not listed: memoryOtherJobs gives their count per kind of work, and they come in this product context when that kind of work is in job. Notes come in full while the response stays within 44 thousand characters (the client's output limit): a note that does not fit is listed first in the index, and a line above the text gives their number. qaDevices holds the company's QA devices: in full with job qa, in brief with dev and analysis. It also returns the variables that apply in work on the product's tasks for that kind of work (variables), all levels together: for the same path and key the more specific level wins (company, project, repository, user, token); description and location, values of short non-secret environment variables only.

NameRequiredDescriptionDefault
jobNoKind of work: analysis - analysis and specs; dev - code and automated tests (local repositories only); qa - manual testing; devops - CI, deployment, servers, logs and performance (code changes and MRs are dev; kinds can be combined, e.g. dev and devops); review - code review; design - mockups
runKeyNoThe client session ID, as run.runKey when a task is taken: the memory for the job delivered here is not repeated at the take; once the session has taken a task, the conventions for working on a task are included here in full too
productIDYesProduct ID
includeSpecNotrue - full product description in spec; default - first paragraph in specExcerpt
localRepositoriesNoIDs of the product's repositories (repositories[].ID) that the task changes, not every clone on the machine; for review - the repositories of the MR, even without a clone. Repository notes: for dev - only for them, for review and devops - for them when given; no effect on analysis, qa and design

TDQS

A4/5.0
Behavior5/5

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

Annotations only confirm this is a safe read (readOnlyHint=true, destructiveHint=false, openWorldHint=false), yet the description layers on rich disclosure: the 44k character truncation rule and how a non-fitting note is surfaced, that memoryOtherJobs holds counts for other kinds of work, that QA devices are full with 'qa' and brief with 'dev'/'analysis', and that variables resolve by level precedence (most specific wins). These are non-obvious behaviors an agent must know and are not derivable from the schema or annotations.

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

Conciseness3/5

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

Content is front-loaded with the core return shape and almost every clause carries information (no filler), which is appropriate for a tool with this many conditional branches. However it is delivered as one dense run-on paragraph with nested parentheticals and semicolon-chained conditionals, making it hard to parse and forcing the agent to re-read to extract the mode-specific rules.

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

Completeness5/5

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

There is no output schema and this is a complex five-parameter tool with conditional return shapes, so the description must carry the full burden of explaining what comes back — and it does, covering spec, memory/notes, qaDevices, repositories and variables including truncation and precedence rules. An agent has enough to call it and interpret the response correctly.

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

Parameters4/5

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

Schema description coverage is already 100%, so the baseline is 3, but the description adds meaning tied to parameters: that 'job' controls which conventions/notes are returned and the detail level of qaDevices, that 'runKey' prevents memory being repeated at take and pulls in task conventions in full, and that 'localRepositories' affects repository notes specifically for dev/review/devops while having no effect on analysis/qa/design.

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

Purpose4/5

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

The description opens with a specific verb and resource: 'Returns a product's working context', then enumerates exactly what that context contains (project, spec excerpt, analyst/lead, versions, repositories, design files). It is far more specific than a tautology, but it never names a sibling (feature_context, task_context, repo_context, product_list) to help an agent disambiguate among the many *_context and *_list tools.

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

Usage Guidelines3/5

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

The description extensively explains how behavior changes conditioned on 'job', 'runKey', 'includeSpec' and 'localRepositories', which implies when each mode is appropriate (e.g. dev vs qa vs design for memory and qaDevices detail). However, it never states when to call product_context instead of another context tool, nor any exclusions or prerequisites beyond the runKey note.

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

product_listA
Read-only
Inspect

Lists projects with their active products (archived products are excluded); projectID narrows the list to one project. Useful for choosing the product to work in.

NameRequiredDescriptionDefault
projectIDNoOptional: return only this project's products.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered structurally. The description adds a genuine behavioral fact beyond the annotations: archived products are filtered out of the result, which materially affects what the agent sees. It does not describe result shape or ordering, keeping it out of 5 territory.

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

Conciseness5/5

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

Two short sentences, roughly 25 words, with the core behavior and exclusion rule front-loaded ahead of the usage hint. Every clause carries information and nothing is repeated from the schema.

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

Completeness4/5

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

For a single-optional-parameter read tool with no output schema, the description covers what is returned at a high level (projects with their active products) and the narrowing filter, which is sufficient to call it correctly. It omits any indication of the returned field shape or pagination, a minor gap rather than a blocking one.

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

Parameters3/5

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

Schema description coverage is 100% and the projectID field is already documented as 'Optional: return only this project's products.' The description's 'projectID narrows the list to one project' restates that in prose rather than adding format, defaulting, or edge-case meaning, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('lists projects with their active products') plus an explicit scope rule (archived products excluded), so the agent knows exactly what set comes back. The closing clause 'useful for choosing the product to work in' implicitly separates it from deeper siblings like product_context and product_modules, which fetch details for an already-chosen product.

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

Usage Guidelines4/5

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

'Useful for choosing the product to work in' gives a clear selection/discovery context for when to reach for this tool, which is the natural entry point before product_context or product_modules. It stops short of naming those alternatives or stating any when-not conditions, so it does not reach a 5.

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

product_modulesA
Read-only
Inspect

Returns the product structure for tagging tasks and bugs: modules (componentIDs link to the shared components list) and components; a module does not imply its components. desc and design (the main Figma frame: snapshotFID - snapshot, contextFID - layers) are returned only for items in IDs; query filters by name.

NameRequiredDescriptionDefault
IDsNoModule and component IDs to return with desc and design
queryNoCase-insensitive module or component name substring, in the language of the workspace data
productIDYesProduct ID

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and non-destructive, so the safety profile is covered. The description adds real behavioral semantics beyond that: desc and design are returned ONLY for items listed in IDs, and 'a module does not imply its components' is a non-obvious structural caveat an agent would otherwise get wrong.

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

Conciseness3/5

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

Information-dense and front-loaded with the main return, but the single run-on sentence mixes return contents, structural caveats, and filter behavior with heavy abbreviation (snapshotFID, contextFID), which is not optimally scannable.

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

Completeness4/5

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

With no output schema, the description carries the burden of describing return shape and does so reasonably (modules vs components, desc/design gated on IDs). Combined with annotations covering the read-only nature, it is largely complete, though the design/Figma fields remain opaque.

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

Parameters3/5

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

Schema description coverage is 100%, so all three parameters are already documented. The description largely restates this (IDs controls desc/design return, query filters by name) rather than adding new format or syntax detail, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('Returns the product structure ... modules ... and components'), which clearly distinguishes it from siblings like product_list and product_context. The parenthetical jargon (componentIDs, snapshotFID/contextFID) muddies the read a little, but an agent can tell what this tool fetches.

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

Usage Guidelines3/5

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

The description implies when it is useful ('for tagging tasks and bugs') and explains how IDs and query filter output, but never names or contrasts an alternative (product_context, product_list, module_update). 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.

product_updateA
Destructive
Inspect

Changes a product (only the passed fields) and returns its updated context; isArchived moves it to the archive with its versions, features and tasks, taking them out of work selection. Changes shared product structure; only at the user's request or with their consent.

NameRequiredDescriptionDefault
specNoNew product spec in Markdown (no HTML), in the language of the workspace data. Replaces the whole field: existing text, `::: doc` sections and `attach:`, `design:`, `color:` tokens stay only if included.
titleNoNew name
designNoProduct design files (Figma links); passed fields are replaced.
leadUIDNoNew product lead: employee UUID.
analyticNoNew product analyst: employee UUID or "any".
platformNoNew product platform.
productIDYesProduct ID
techStackNoNew technology stack; replaces the previous one.
isArchivedNotrue - archive the product, false - restore it.
isDeployEnabledNoWhether the product's tasks have a deployment stage.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and destructiveHint=true, so the safety profile is covered; the description goes further by disclosing the archive cascade ('moves it to the archive with its versions, features and tasks, taking them out of work selection') and the partial-update behavior. It stops short of permissions, reversibility, or rate-limit detail, so it is strong but not exhaustive.

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

Conciseness4/5

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

Front-loaded with the core action, then the partial-update rule, then the archive side effect; no filler sentences. The archive sentence is dense but every clause carries new information.

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

Completeness4/5

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

For a 10-parameter destructive mutation with a fully documented schema but no output schema, the description covers scope, consent, and the most dangerous side effect. The return value is only gestured at ('returns its updated context'), which is the one remaining gap.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds a meaningful global rule the schema does not state per-field: only explicitly passed fields are changed. That materially affects how an agent treats the nine optional parameters.

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

Purpose4/5

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

States a specific verb and resource ('Changes a product') and adds the partial-update scope ('only the passed fields') plus the return ('its updated context'). It is clearly distinguishable from read-only siblings like product_context or product_list, though it does not name any sibling explicitly.

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

Usage Guidelines4/5

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

Provides an explicit precondition: 'only at the user's request or with their consent,' which tells the agent when this mutation is permitted. It does not, however, point to alternatives (e.g., product_context for reads) or state when not to use it beyond the consent rule.

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

repo_blameA
Read-only
Inspect

Returns line-by-line blame of a file at a ref: ranges (lines attributed to a commit sha) and commits (title, message with task keys, author, dates). Blame at the parent of a fix commit shows the lines as they were before the fix. Up to 204800 bytes (large files in ranges via startLine/endLine); renames are not tracked.

NameRequiredDescriptionDefault
refNoBranch, tag or sha; defaults to the default branch.
pathYesFile path from the repository root.
endLineNoLast line of the range, inclusive.
startLineNoFirst line of the range (1-based).
repositoryIDYesRepository ID.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/destructiveHint, so the safety profile is covered. The description adds genuinely useful behavioral context beyond that: a 204800-byte cap, the startLine/endLine escape hatch for large files, and the caveat that renames are not tracked.

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

Conciseness4/5

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

Three tight sentences with the core operation front-loaded and no filler. Dense but every clause carries information; only minor compression could improve it.

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

Completeness4/5

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

With no output schema, the description carries the burden of describing return content, and it does so (ranges attributed to a sha; commits with title, message with task keys, author, dates). The size limit and rename caveat round out what an agent needs before calling.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description goes slightly beyond by explaining that startLine/endLine exist to page through large files and implying ref selection semantics via the fix-commit-parent example, adding intent the schema text does not.

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

Purpose4/5

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

States a specific verb and resource: 'Returns line-by-line blame of a file at a ref', and enumerates the two output groupings (ranges and commits). This is clearly distinct from repo_history/repo_search in intent, though the near-sibling repo_line_history is never named or contrasted.

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

Usage Guidelines3/5

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

Gives an implied usage scenario ('Blame at the parent of a fix commit shows the lines as they were before the fix'), which helps the agent reason about ref selection. It does not state when to prefer this over repo_line_history or repo_history, so the routing guidance is only implied.

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

repo_compareA
Read-only
Inspect

Returns the diff between two refs without truncation: by default from the merge base of from and to, as in an MR; straight compares with from directly (e.g. a previous review's sha). Patch lines carry new-version line numbers; pages are up to 153600 bytes (next page: offset = nextOffset until null), and a file that does not fit comes with error plus baseSha and toSha.

NameRequiredDescriptionDefault
toYesRef to compare: task branch, tag or sha.
fromNoBase: branch, tag or sha; defaults to the default branch.
pathNoDirectory prefix or file glob.
offsetNoPage offset: nextOffset of the previous response.
contextNoContext lines in the patch; default 3.
straightNoCompare with from directly, not with the merge base.
extensionsNoFile extensions without the dot.
lineNumbersNoNew-version line numbers; default true.
repositoryIDYesRepository ID.

TDQS

A4/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnlyHint, destructiveHint=false), yet the description adds substantial operational detail: page size of 153600 bytes, next-page offset semantics terminating at null, new-version line numbering, and the error-plus-baseSha/toSha shape for oversized files. This is well beyond what the structured fields provide.

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

Conciseness4/5

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

Front-loaded with the core purpose, then layered with progressively finer detail (mode, line numbering, pagination, errors). It is dense, but each clause carries distinct operational information and little is redundant.

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

Completeness4/5

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

With no output schema and nine parameters, the description does the heavy lifting for return values — patch lines, line numbering, pagination termination, and error shape are all covered. It is slightly thin on how path/extensions filtering affects returned content, but otherwise complete for calling the tool correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description meaningfully extends several parameters: it clarifies from/to as refs with merge-base defaulting, explains straight's effect on the comparison base, describes the offset chaining to nextOffset, and states that line numbers are new-version. That is real added meaning over the schema text.

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

Purpose4/5

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

States a concrete verb and resource ('Returns the diff between two refs') with the important nuance of merge-base vs straight comparison. It doesn't explicitly name which siblings it is not, but 'diff between two refs' is a unique resource among the repo_* siblings, so an agent can still distinguish it.

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

Usage Guidelines3/5

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

It implies usage by contrasting default merge-base behavior ('as in an MR') with the straight mode ('e.g. a previous review's sha'), which hints at when each applies. However, it never says when to choose this tool over repo_history, repo_file, or repo_search, 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.

repo_contextA
Read-only
Inspect

Returns an overview of a product repository: git provider, URL, default branch and its sha (defaultBranchSha), linked projects, agent access level, the start of the README (up to 16384 bytes) and the technical passport (stack, architecture, conventions; stale - may be outdated). Useful for an unfamiliar repository; reads at a sha from the responses are served from the cache.

NameRequiredDescriptionDefault
repositoryIDYesRepository ID.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered. The description still adds real behavioral context beyond them: README is truncated to 16384 bytes, the technical passport is explicitly flagged as stale/possibly outdated, and reads at a sha are served from cache. It does not cover failure behavior (e.g. invalid or inaccessible repositoryID), 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.

Conciseness4/5

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

One sentence with a colon-delimited payload list, front-loaded with the core purpose before the field enumeration. Dense but every clause carries information; it could have been split for readability but nothing is wasted.

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

Completeness4/5

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

For a single-parameter read tool with no output schema, the description substitutes well for one by enumerating the returned fields, and it flags truncation, staleness and caching. Missing only error/edge-case behavior and whether any permissions are required to read the repository.

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

Parameters3/5

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

The schema has a single parameter at 100% description coverage ('Repository ID.'), so the schema already carries the semantics and the baseline is 3. The description adds nothing about the parameter itself (format is only implied by the uuid type in schema), so no credit above baseline.

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

Purpose4/5

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

The description states a specific verb and resource ('Returns an overview of a product repository') and then enumerates exactly what that overview contains: git provider, URL, default branch and sha, linked projects, access level, README head, technical passport. That enumeration effectively separates it from sibling read tools such as repo_file, repo_tree or repo_search, but no sibling is named explicitly, so it stops short of a 5.

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

Usage Guidelines3/5

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

'Useful for an unfamiliar repository' gives one clear usage context, which is more than nothing, but there is no explicit when-not guidance and no alternative tool is named (e.g. repo_tree or repo_file for targeted reads). Usage is implied rather than routed.

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

repo_fileA
Read-only
Inspect

Reads files at a ref: one file (path) or up to 20 parts (files) - whole files, line ranges or declarations (symbol: a function, class, method or type with its leading comment, found heuristically). Up to 204800 bytes per response, so large files are read in ranges via startLine/endLine (totalLines is returned); a failed part carries its own error without affecting the others.

NameRequiredDescriptionDefault
refNoBranch, tag or sha; defaults to the default branch.
pathNoSingle file path from the repository root.
filesNoSeveral parts: whole files, line ranges or declarations by name.
symbolNoDeclaration name in the path file.
endLineNoLast line of the range for path, inclusive.
startLineNoFirst line of the range for path (1-based).
lineNumbersNoInclude line numbers; default true.
repositoryIDYesRepository ID.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already establish readOnlyHint=true, destructiveHint=false, openWorldHint=false, so safety is covered. The description adds real behavioral context beyond that: the 204800-byte response cap, the totalLines return so large files can be paged with startLine/endLine, and per-part error isolation in a multi-part read. It does not cover auth or permission expectations, but adds substantial value over the annotations.

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

Conciseness4/5

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

Front-loaded with the core purpose and packed with useful detail in one dense block, with no filler sentences. It is somewhat run-on, bundling limits, heuristics, and error behavior into a single breath, but every clause carries information.

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

Completeness4/5

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

With no output schema, the description carries the return-value burden, and it does so by naming totalLines and the per-part error behavior. Combined with the byte cap and mode enumeration, an agent has enough to invoke it correctly; only auth/permission expectations and content formatting are unstated.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description earns above it by explaining semantics the schema does not: symbol resolves a function/class/method/type declaration including its leading comment and is 'found heuristically', startLine/endLine enable range reads because of the byte cap, and files is capped at 20 parts. These add genuine meaning beyond the field descriptions.

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

Purpose5/5

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

States a precise verb (Reads) and resource (files at a ref), and immediately enumerates the two operating modes: single file via path, or up to 20 parts via files, each being whole-file, line range, or declaration. This distinguishes it cleanly from siblings like file_get, repo_search, or repo_blame.

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

Usage Guidelines3/5

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

Usage is implied through the mode descriptions (single file vs multi-part, ranges for large files), but there is no explicit when-to-use-this vs an alternative sibling, and no statement of when not to use it. The agent can infer intent but must reason about it.

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

repo_historyA
Read-only
Inspect

Returns the commit history of a ref, file or directory, like git log, paginated: message, author, dates, parents, task keys from the message (taskKeys) and linked tasks (tasks); hasMore marks a next page.

NameRequiredDescriptionDefault
refNoBranch, tag or sha; defaults to the default branch.
pageNoPage number, from 1.
pathNoFile or directory from the repository root; defaults to the whole ref.
perPageNoCommits per page; default 30.
repositoryIDYesRepository ID.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds real value on top by disclosing the pagination mechanic ('hasMore marks a next page') and the shape of returned fields. It omits auth/rate-limit details, hence 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.

Conciseness4/5

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

A single front-loaded sentence naming the core action first, then the returned fields and pagination flag. It is dense but waste-free; the field enumeration is slightly list-like but each item is informative.

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

Completeness4/5

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

With no output schema, the description carries the return-shape burden and does so well, enumerating returned fields (message, author, dates, parents, taskKeys, tasks) plus the hasMore pagination signal. Missing only ordering guarantees and error behavior, so it is nearly complete for a read-only history tool.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents ref, page, perPage, path and repositoryID. The description restates the target as 'ref, file or directory' but adds no syntax or semantics (e.g. ordering, sha format) 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.

Purpose4/5

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

States a specific verb and resource ('returns the commit history of a ref, file or directory') and grounds it with the 'like git log' analogy, which is immediately legible. It scopes the target (ref vs file vs directory) clearly, though it never names the closest siblings (repo_line_history, repo_blame) to disambiguate at the line level.

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

Usage Guidelines3/5

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

The git log analogy implies when this is the right tool and the schema defaults (ref defaults to default branch, path defaults to whole ref) are surfaced, giving implicit usage context. However there is no explicit when-to-use/when-not guidance and no routing to alternatives like repo_line_history or repo_blame.

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

repo_line_historyA
Read-only
Inspect

Shows who changed lines startLine-endLine of a file and in which task, from commits synced to Kosmodrom across all branches, newest first (linkType: message - task key in the message, branch - commit on the task branch; match=path - no line ranges for that commit). Lines shift with later edits, so results are candidates; only task-linked commits are included, up to 100 (truncated beyond).

NameRequiredDescriptionDefault
pathYesFile path from the repository root in the current version.
limitNoCommits in the response; default 30.
endLineNoLast line of the range, inclusive.
startLineNoFirst line of the range (1-based); without a range, all changes to the file.
repositoryIDYesRepository ID.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false), so the description adds value by disclosing linkType semantics (message vs branch), the match=path case with no line ranges, the caveat that lines shift so results are candidates, and the 100-commit truncation. It stops short of explaining the return structure or pagination beyond truncation.

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

Conciseness4/5

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

The action is front-loaded and every clause carries information (scope, ordering, linkType, caveat, cap). It is a single dense sentence with stacked parentheticals, which slightly hurts parseability, but there is little waste.

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

Completeness4/5

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

With no output schema, the description carries the burden and does so well: it describes what is returned (who, task, commits), ordering (newest first), filtering (task-linked only), and truncation behavior. The main gap is the absence of explicit tiering against sibling tools, but for a leaf-level query tool it is close to complete.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all five parameters including startLine/endLine, limit, path, and repositoryID. The description references startLine-endLine but adds no syntax or default detail beyond what the schema provides, so the baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb and resource ('Shows who changed lines startLine-endLine of a file and in which task') with scope qualifiers (across all branches, task-linked commits only). This is clearly distinguished from siblings like repo_blame (line attribution) and repo_history (commit log) by the explicit line-range + task-attribution framing. An agent can select it without opening the schema.

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

Usage Guidelines3/5

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

It implies when the tool applies (querying task-attributed changes on a specific line range) and states real limits ('only task-linked commits are included, up to 100'). However, it never names an alternative such as repo_blame or repo_history, nor states when-not to use it, so routing guidance is only implied.

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

repo_treeA
Read-only
Inspect

Lists a repository directory at a ref: up to 500 entries, 1-4 levels below path (truncated when cut off). The response includes the resolved sha.

NameRequiredDescriptionDefault
refNoBranch, tag or sha; defaults to the default branch.
pathNoDirectory from the repository root, without a leading /; defaults to the root.
depthNoNesting depth, 1-4; default 1.
repositoryIDYesRepository ID.

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuinely new behavior: a 500-entry cap, permissible depth of 1-4 levels, truncation when cut off, and that the response carries the resolved sha. That is real operational 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.

Conciseness4/5

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

A single front-loaded sentence with no filler; every clause carries information (entry cap, depth range, truncation, resolved sha). It is dense rather than strictly minimal, but nothing is wasted.

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

Completeness4/5

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

With no output schema, the description usefully notes the response includes the resolved sha and discloses the 500-entry cap and truncation behavior. Combined with 100% schema coverage, an agent has enough to call it correctly, though ordering/pagination semantics of the returned tree remain implicit.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters are already documented in the schema, which sets the baseline at 3. The description restates depth (1-4) and the ref/path scoping but adds no format or syntax 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.

Purpose4/5

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

States a specific verb and resource ('Lists a repository directory at a ref'), and the scope is concrete enough that an agent can immediately tell this is a tree/listing operation. It does not explicitly contrast itself with near siblings like repo_file or repo_search, 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.

Usage Guidelines2/5

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

No when-to-use guidance and no alternatives named. The agent gets no signal about when to choose repo_tree over repo_file, repo_context, or repo_search, even though these siblings overlap heavily in the repository-exploration space.

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

session_contextA
Read-only
Inspect

Returns the token owner (signed-in user), the company and the language of its data, token scopes, the owner's privileges (allows) and token expiry (expiresAt; null - no expiry). Also includes the company's and user's conventions and notes for AI agents (memoryInstructions) with an index of further memory records (memory: ID → title), as reference material. Also returns the company's, user's and token's variables for AI agents (variables): description, file path (file) or environment variable name (env), and the value of short non-secret environment variables only. In work on a task, the variables of the product context apply.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description still adds real behavioral context: expiresAt can be null (no expiry), and only 'short non-secret environment variables' have their values exposed, which is a meaningful disclosure about what is and is not returned. It stops short of describing freshness, caching, or cost.

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

Conciseness3/5

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

The content is dense and mostly earns its place, but it is delivered as long run-on sentences that stack clause after clause ('Also... Also...') with no structure. Front-loading is adequate — the primary return set leads — but a bulleted breakdown of the three return groups would be far more scannable.

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

Completeness4/5

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

With no output schema, the description carries the full burden of explaining returns, and it does so thoroughly, covering identity, scopes, privileges, expiry, memory index, and variables. What it omits is routing context relative to the many sibling context tools, which an agent in this dense tool namespace would need.

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

Parameters4/5

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

The tool takes zero parameters, so per the rubric the baseline is 4. The description correctly adds no parameter noise and instead spends its words on return content.

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

Purpose4/5

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

The description states a specific resource (session/token context) and enumerates the exact fields returned: token owner, company, language, scopes, privileges, expiry, memory index, and variables. An agent knows precisely what this tool yields. It never distinguishes itself from sibling context tools such as product_context, task_context, or repo_context, 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.

Usage Guidelines2/5

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

There is no statement of when to call this versus the many sibling context tools (product_context, task_context, repo_context, memory_list). The trailing sentence 'In work on a task, the variables of the product context apply' gestures at context layering but does not tell the agent when this tool is the right choice or what prerequisites exist.

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

task_code_contextA
Read-only
Inspect

Returns a task's code: product repositories (main one first), live branches with the task key, commits with stats and paths, the task's MRs (link; review threads stay at the git provider) and reading hints. Useful when the user asks how a task is implemented or wants it reviewed.

NameRequiredDescriptionDefault
IDNoTask ID.
keyNoTask number without #, if the ID is unknown.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds real behavioral value beyond that: it discloses the response composition and a caveat that review threads stay at the git provider. It stops short of noting pagination, auth, or size limits.

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

Conciseness5/5

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

Two tightly packed sentences: verb+resource and the content list are front-loaded, followed by the call-for-action. Despite enumerating many items, no sentence is wasted.

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

Completeness5/5

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

With no output schema, the description carries the return-value burden and does so thoroughly, listing repositories, branches, commits, MRs, and hints. Nothing an agent needs to call this read-only tool correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so both ID and key are already documented in the schema. The description adds nothing about identifier selection or syntax, so the baseline 3 for schema-fully-covered parameters applies.

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

Purpose5/5

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

States a specific verb ('Returns') and resource ('a task's code') and then enumerates the exact contents: product repositories, live branches, commits with stats/paths, MRs, and reading hints. This clearly distinguishes it from siblings like task_context and feature_code_context.

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

Usage Guidelines4/5

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

Provides an explicit usage scenario: 'when the user asks how a task is implemented or wants it reviewed.' Clear context for selecting the tool, but it names no alternatives or exclusions (e.g., task_context vs feature_code_context vs repo_context), so the routing is left partly to inference.

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

task_contextA
Read-only
Inspect

Returns a task or bug by ID or number (unique within the company): spec, gist (gistInfo.stale - the spec changed after the gist), category, type (severity for bugs; bugType - defect nature), feature (feature.spec with includeFeatureSpec; feature.plan - a window of the plan), relations (dependencies - what it waits for; blockedTasks - what waits for it), allowedActions, specRevision, productID and a page of the task chat. Imported designs are in designs (design: markers; snapshotFID, contextFID with contextSize, assetsFID) the design block holds design files and the main frames of the task's modules (for visual work), and attachments are in attaches by fid; raw design links without a designs entry are not imported. Useful when the user mentions a task number or asks about a task.

NameRequiredDescriptionDefault
IDNoTask ID; preferred over key.
keyNoTask number without a prefix, e.g. 25865, if the ID is unknown.
chatAfterNoRead messages newer than chat.after.
chatLimitNoChat messages to return (default 20, max 100).
chatBeforeNoRead messages older than chat.before.
includeFeatureSpecNotrue includes the full feature spec (feature.spec); omitted by default.

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnly/destructive=false, so safety is covered; the description goes further by disclosing the shape of the return (gist staleness, relations semantics, allowedActions, specRevision) and an edge case ("raw design links without a designs entry are not imported"). It omits auth and rate-limit behavior, 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.

Conciseness3/5

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

Purpose is front-loaded in the first clause, but the body is a dense run-on enumerating return fields in one sprawling sentence. Given there is no output schema, the length is somewhat justified, but it is hard to scan.

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

Completeness4/5

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

With no output schema, the description must carry return documentation, and it does so thoroughly, covering spec, gist, relations, designs, and attachments for a tool with nested objects. Minor gap on chat pagination/ordering behavior beyond what the schema states.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents all six parameters. The description adds only marginal linkage, tying includeFeatureSpec to feature.spec and "ID or number" to the ID/key pair; it says nothing about the chatAfter/chatBefore/chatLimit pagination object semantics.

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

Purpose4/5

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

States a specific verb+resource ("Returns a task or bug") with a precise scope ("by ID or number (unique within the company)") and enumerates the returned domain fields. An agent can distinguish it from a write like task_update, but no sibling tool is named to sharpen the boundary against task_search or task_evaluation_context.

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

Usage Guidelines3/5

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

"Useful when the user mentions a task number or asks about a task" gives an implied trigger but no when-not or alternative routing. With siblings such as task_search and task_evaluation_context present, the description never tells the agent which to pick.

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

task_createAInspect

Creates a task (not a bug) as a draft; the draft is published separately at the user's request. rulesRevision is the current revision of the workspace's task creation template for the type, and spec is checked against that template; placement is one of featureID / featureKey (product and version from the feature), versionID (no suitable feature) or productID (product backlog). Stage assignees: employee uuid, "any" (any employee) or null (no such stage; the work stage always exists). Returns link, status and available transitions.

NameRequiredDescriptionDefault
ordNoPosition of the new task, as ord in task edits; omitted - the end of the feature's plan.
gistYesGist: one or two sentences, "problem → solution", up to 300 characters of plain text (no Markdown, links or task keys), in the language of the workspace data.
specNoSpec (requirements) in the language of the workspace data, per the task creation template; Markdown, HTML is rejected.
typeYesWork type by the nature of the work; the template depends on it.
titleYesTask title in the language of the workspace data, up to 200 characters.
labelsNoLabels.
priorityNoPriority; a human decision, set only at the user's explicit request.
featureIDNoFeature ID - the preferred placement
moduleIDsNoProduct modules the task affects
productIDNoProduct ID - the product backlog, last resort
versionIDNoVersion ID - when no feature fits
featureKeyNoFeature key #F12; not with featureID
componentIDsNoProduct components the work actually touches; a module does not imply them. May stay empty if unsure
testAssigneeNoTester; default - no testing stage.
workAssigneeNoAssignee; default "any".
workTimePlanNoPlanned work time in minutes, per the assignee's role level
rulesRevisionYesRevision of the task creation template for this type; a stale one is rejected
reviewAssigneeNoReviewer; default - no review stage.
approvalAssigneeNoApprover; default - no approval stage.
workIterationDateNoA date within the work iteration, YYYY-MM-DD; defaults to the current iteration.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations only declare the safety profile (not read-only, not destructive, closed-world); the description adds substantive behavior: creation yields an unpublished draft, the draft is published separately on request, a stale rulesRevision is rejected, and spec must conform to the template for the type. It also notes the return payload, which no output schema covers.

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

Conciseness4/5

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

A single dense paragraph that front-loads purpose and then walks placement, assignees, and returns in a logical order. Every clause carries information, though the long compound sentences are heavier than ideal.

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

Completeness4/5

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

For a 20-parameter mutation tool with no output schema, the description covers the critical unknowns: draft/publish lifecycle, template revision validity, placement selection, assignee semantics, and the returned link/status/transitions. Coverage is solid, though optional fields like ord, labels, or time plan rely on the schema alone.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description meaningfully enriches it: it explains what rulesRevision represents, that spec is validated against the type's template, how to choose among the four placement params, and that stage assignees accept an employee uuid, "any", or null. That is real meaning beyond the raw schema text.

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

Purpose5/5

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

Opens with a specific verb+resource ("Creates a task") and immediately disambiguates from the obvious sibling with "(not a bug)". It also states the draft-only creation model, which distinguishes it from task_publish and task_update.

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

Usage Guidelines4/5

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

Gives a clear decision rule for placement (featureID/featureKey preferred, versionID when no feature fits, productID as backstop) and implies the follow-up publish step via task_publish. It lacks an explicit named alternative (e.g. bug_create / task_publish) but the context is unambiguous.

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

task_deleteA
Destructive
Inspect

Deletes a task or bug (shared team data). Irreversible: deletion is soft, but there is no way to restore the task; only at the user's direct request. Finishing the work on a task is not deletion.

NameRequiredDescriptionDefault
IDNoTask ID; preferred over key.
keyNoTask number, if the ID is unknown.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and readOnlyHint=false. The description adds the crucial nuance that deletion is soft but unrecoverable ('no way to restore the task'), which materially informs an agent beyond the binary destructive flag.

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

Conciseness5/5

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

Three short sentences, each earning its place: what it deletes, the irreversibility constraint, and the usage boundary. Front-loaded with the action and no redundant filler.

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

Completeness5/5

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

For a two-parameter delete tool with full schema coverage and annotations, the description supplies the key missing behavioral detail (soft delete with no restore). No output schema exists, and nothing an agent needs to call it safely is absent.

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

Parameters3/5

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

Schema description coverage is 100%, with both ID and key fully documented in the schema (ID preferred over key). The description adds no parameter-level detail, which is acceptable given the schema already carries that information.

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

Purpose5/5

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

States a specific verb and resource ('Deletes a task or bug') plus scope ('shared team data'). The closing line explicitly distinguishes deletion from finishing work, separating it from the sibling task_done without requiring schema inspection.

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

Usage Guidelines4/5

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

Explicitly conditions use on the user's direct request and warns that finishing work is not deletion, giving clear when-to-use and when-not-to-use guidance. It stops short of naming the alternative tool (task_done) that should be used instead.

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

task_doneA
Destructive
Inspect

Finishes the work on a taken task (shared team data): outcome, result, message and usage in one call. Outcomes: done (the work is done or accepted and the task moves on), return (sent back with a required message, including bugs in work returning to testing), wait (the part is done, the task waits in the queue), close. The server makes the transition, closes the worklog and calculates the cost of the work from the difference of the start and end snapshots; done returns the feature plan.

NameRequiredDescriptionDefault
IDNoTask ID; preferred over key.
keyNoTask number without #, if the ID is unknown.
runYesSession counters accumulated since its start, as at the start of the work, at the end of the same session; limits - subscription limits at the end (window to utilization 0-1 and resetsAt in ISO 8601), accuracy 0-1 - counters accuracy, 1 by default.
gistNoGist: one or two plain-text sentences "problem → solution", up to 300 characters, without Markdown, links or task keys, in the language of the workspace data; updated if the solution changed.
resultNoResult: in work - the whole result field (Markdown in the language of the workspace data, HTML is rejected; replaces the whole field), the tester's "QA verification" block is kept by the server; in testing - only that block, placed by the server at the end of the field; not accepted at approval and review.
messageNoMessage to the task chat: required for a return (what to fix); otherwise only what people need to know.
outcomeYesOne of the outcomes returned when the task was taken.
moduleIDsNoFull new list of modules actually touched.
attachmentsNoFile IDs (fid) of uploaded files, up to 5, attached to the message.
closeReasonNoClosing reason, required for close: resolved, notDoing, notReproducible, notBug or duplicate; the explanation goes in the message.
componentIDsNoFull new list of components actually touched.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, so the mutation is known. The description goes beyond them by disclosing server-side effects: it makes the transition, closes the worklog, and calculates cost from the start/end snapshots, plus that 'done' returns the feature plan. Missing only notes on reversibility/failure modes.

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

Conciseness4/5

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

The core action is front-loaded in the first clause, followed by the outcome list and server behavior. Dense but each sentence carries information; the long outcome enumeration is justified by the four-way branch the agent must pick.

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

Completeness4/5

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

For an 11-parameter mutation with nested objects and no output schema, the description covers purpose, outcome branching, and server-side effects adequately, and the schema fully documents parameters. It leaves the prerequisite (task must already be taken) and any error/rollback behavior to inference.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description earns a bump by giving the meaning of each outcome enum (done/return/wait/close) and the side effect tied to 'done', which the bare enum listing does not convey; it does not otherwise add syntax beyond the schema.

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

Purpose5/5

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

States a specific verb and resource ('Finishes the work on a taken task') and prefaces it with the scope ('shared team data'). The phrase 'a taken task' implicitly routes the agent away from task_take/task_create/task_update, so the tool's role in the flow is clear without opening any schema.

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

Usage Guidelines4/5

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

Enumerates the four outcome variants with the condition that selects each (done = accepted and task moves on; return = sent back with a required message; wait = part done, waits in queue; close). That is strong in-tool selection guidance, but it never names a sibling alternative or states a prerequisite (e.g. task_take must run first) explicitly.

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

task_evaluateAInspect

Saves a task stage evaluation when the user asks to evaluate work: a recommended bonus factor and a comment, visible to all who see the task. One evaluation per stage (a new one replaces the old); the server marks it final or interim by whether the task is closed, and the factor is a recommendation that does not change tracked time.

NameRequiredDescriptionDefault
IDNoTask ID; preferred over key.
keyNoTask number without #, if the ID is unknown.
stageNoStage: work - execution (default), review, or testing.
factorYesRecommended bonus factor, 0 to 2 in steps of 0.1.
commentYesRationale in the language of the workspace data: up to 4 paragraphs, no rates or money amounts. Markdown (paragraphs, headings, lists, bold, italic, tables, links, emoji); attach:, design: and nested ::: doc are not supported.
rulesRevisionYesRevision of the evaluation rules returned with the stage's evaluation data.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only declare the safety profile (readOnly=false, destructive=false, openWorld=false); the description adds real behavior: one evaluation per stage, replacement of prior evaluation, server-side final-vs-interim labeling driven by task closure, and that the factor is advisory and does not alter tracked time. It also discloses visibility ('visible to all who see the task'), which no annotation conveys.

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

Conciseness4/5

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

Front-loaded with the action and trigger, and every clause carries information (replacement rule, final/interim, advisory factor). It is dense to the point of one long semicolon-chained sentence, which costs a little readability.

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

Completeness4/5

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

No output schema exists, but the description covers the essentials an agent needs: what gets persisted, the one-per-stage replacement rule, how the server classifies the evaluation, and that the factor is non-binding. It is only slightly short on things like permission requirements or the source of rulesRevision beyond the schema note.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3, but the description adds meaning the schema lacks for two key params: 'factor' is a recommendation that does not change tracked time, and 'comment' is visible to everyone who sees the task. The replacement/one-per-stage rule also constrains how a call is composed.

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

Purpose5/5

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

States a precise verb+resource ('Saves a task stage evaluation') along with the payload it carries (bonus factor, comment) and the trigger. An agent can tell this is the write counterpart to the read-side sibling task_evaluation_context without opening either schema.

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

Usage Guidelines4/5

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

Gives an explicit activation condition ('when the user asks to evaluate work'), which is more than most tools offer. It does not, however, name the read-side alternative (task_evaluation_context) or state any exclusions/preconditions, so a 5 is not earned.

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

task_evaluation_contextA
Read-only
Inspect

Returns the data for evaluating a task stage when the user asks for a work evaluation, together with the workspace's evaluation rules for the task type and stage (rules: content and the rulesRevision an evaluation carries): spec and result, the stage assignee with level, rates, time and cost, plan and time by status, returns, bugs and regressions with fix cost, commits and the previous evaluation. Money requires task:costs for the task, otherwise null; null salary and bonus are hidden. Rates and amounts are for the assessment, not for the evaluation comment.

NameRequiredDescriptionDefault
IDNoTask ID; preferred over key.
keyNoTask number without #, if the ID is unknown.
stageNoStage: work - execution (default), review, or testing.

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already establish readOnly/non-destructive behavior, and the description adds real value on top: money fields require the task:costs permission else null, null salary and bonus are hidden, and rates/amounts are scoped to the assessment rather than the comment. These are concrete masking/permission behaviors not derivable from annotations.

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

Conciseness3/5

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

The information is valuable but delivered as one dense run-on sentence with a heavy parenthetical list of returned fields. It is not front-loaded into scannable units, though nothing is outright wasted.

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

Completeness4/5

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

With no output schema, the description carries the return-shape burden and largely does so by enumerating spec/result, assignee, rates, plan-by-status, bugs, commits and prior evaluation. Permission-driven nulling is also covered, leaving only pagination/size behavior unaddressed.

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

Parameters3/5

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

Schema coverage is 100% and all three parameters (ID, key, stage) are documented in the schema with the ID-vs-key preference and the stage enum. The description adds no syntax or format detail 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.

Purpose4/5

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

States a specific verb ('Returns') and resource ('the data for evaluating a task stage' plus workspace evaluation rules), and enumerates the returned fields. An agent can tell this is a read-context helper, distinct from the write-oriented sibling task_evaluate, though the description never names that sibling to make the contrast explicit.

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

Usage Guidelines3/5

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

Provides an implied trigger ('when the user asks for a work evaluation'), which is genuine but thin. There are no exclusions, no prerequisites, and no pointer to task_evaluate as the alternative for actually submitting an evaluation, so the routing decision 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.

task_publishAInspect

Publishes the token owner's own task or bug draft without taking it into work (shared team data), like the "Publish" button in the web: the draft goes to approval if an approver is assigned, otherwise to work to the assignee. Only at the user's request: the draft is their review of the spec. Returns link, status and available transitions.

NameRequiredDescriptionDefault
IDNoTask ID; preferred over key.
keyNoTask number without #, if the ID is unknown.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover safety (readOnlyHint=false, destructiveHint=false, openWorldHint=false), and the description adds real behavioral context: the draft routes to approval when an approver is assigned and to the assignee otherwise, and it is restricted to the caller's own data. It does not describe failure modes (e.g., no approver and no assignee) or any state side effects on related records.

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

Conciseness4/5

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

Front-loads the core action and the key behavioral distinction (not taking the draft into work) in the first clause. Three dense sentences, all carrying information, though the mid-sentence analogy and nested routing clause make it slightly run-on.

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

Completeness4/5

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

For a mutation tool with no output schema, the description compensates by naming the return payload (link, status, available transitions) and the routing outcome of publishing. Prerequisites (own draft, user-initiated) are covered; only edge-case behavior when no approver/assignee exists is left unspecified.

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

Parameters3/5

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

Schema description coverage is 100% and both parameters (ID, key) are documented in-schema, including the ID-preferred-over-key preference. The description adds nothing about parameter selection, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb (Publishes) and resource (own task or bug draft) with a clear scope constraint: it only touches the token owner's shared-team draft and explicitly does NOT take it into work. The web-button analogy plus the approval/assignee routing makes it instantly distinguishable from siblings like task_take and task_update.

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

Usage Guidelines4/5

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

Gives an explicit when-to-use gate: "Only at the user's request: the draft is their review of the spec." It also implicitly contrasts with task_take by stating the tool does not pull the draft into work. It never names a sibling alternative by name, so it stops short of the top score.

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

task_relation_deleteA
Destructive
Inspect

Deletes a task relation addressed by key, otherKey and role, as in the task's relations; removing dependencies / blockedTasks unblocks the waiting task. Irreversible; only at the user's direct request, after the user confirms what will be affected.

NameRequiredDescriptionDefault
keyYesCurrent task number — the one the role refers to
roleYesRelation role relative to the current task, as in its relations
otherKeyYesRelated task or bug number

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the write/destructive profile is covered structurally. The description adds real value beyond that: it states the deletion is irreversible and explains the unblocking side effect on the waiting task, which is exactly the kind of consequence an agent needs before calling a destructive tool.

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

Conciseness5/5

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

Two tightly packed sentences with zero filler; the destructive action and its consequence come first, and the confirmation precondition follows. Every clause carries information.

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

Completeness4/5

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

For a 3-required-parameter destructive mutation with no output schema, the description covers irreversibility, the confirmation requirement, and the semantic effect of the deletion. It does not mention failure modes (e.g., relation not found) or auth requirements, which would round it out fully.

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

Parameters3/5

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

Schema description coverage is 100% and the role enum is fully documented in the schema, so the baseline is 3. The description's reference to address fields 'as in the task's relations' loosely echoes the schema's role/key semantics but adds no new format or syntax detail.

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

Purpose5/5

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

Names a specific verb (Deletes) and resource (a task relation) and identifies the three addressing fields, which distinguishes it cleanly from the sibling task_relation_update. An agent can tell exactly which operation this performs without opening the schema.

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

Usage Guidelines4/5

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

Gives an explicit precondition: only at the user's direct request, after the user confirms what will be affected. It also explains the downstream effect of removing dependencies/blockedTasks. It stops short of naming the alternative tool (task_relation_update) for changing a relation instead of deleting it, so it is strong but not complete routing guidance.

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

task_relation_updateAInspect

Creates or changes a relation between two tasks or bugs. The role is relative to the current task (key), with the names used in the task's relations: dependencies - the current task waits for the other; blockedTasks - the other waits for it; duplicateOf / duplicates; regressionOf / regressions; foundDuring / findings; related - neutral. For a bug, foundDuring is the task during which it was found and regressionOf the task that introduced the defect (by git history only). Without a relation of that role one is created (desc - explanation); an existing one gets newRole and desc. Moving it away from dependencies / blockedTasks unblocks the waiting task with notifications, as in the web app.

NameRequiredDescriptionDefault
keyYesCurrent task number — the one the role refers to
descNoExplanation; null or empty string — remove; omitted — unchanged
roleYesRelation role relative to the current task, as in its relations
newRoleNoNew role of an existing relation; omitted — unchanged
otherKeyYesRelated task or bug number

TDQS

A4.4/5.0
Behavior4/5

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

Annotations declare a non-read-only, non-destructive, non-open-world mutation, so the safety profile is covered. The description adds real behavioral context beyond that: moving a relation away from dependencies/blockedTasks 'unblocks the waiting task with notifications, as in the web app.' It does not state permissions, reversibility, or return shape.

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

Conciseness4/5

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

Front-loaded with purpose, and the long role enumeration earns its space because each value needs disambiguation. It is a single dense paragraph, though; splitting the role list into a structured form would improve scannability.

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

Completeness4/5

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

For a 5-parameter mutation tool with no output schema, the description covers role semantics, create-vs-update behavior, and side effects. It omits what the tool returns and any error/permission context, which an agent calling a write operation would benefit from.

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

Parameters5/5

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

Schema coverage is 100%, so baseline is 3, but the description goes well beyond the schema by defining directional semantics for each role ('dependencies - the current task waits for the other; blockedTasks - the other waits for it') and by explaining bug-specific meanings of foundDuring/regressionOf. This meaning is not available from the raw enum.

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

Purpose5/5

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

The first sentence gives a specific verb and resource: 'Creates or changes a relation between two tasks or bugs.' It is immediately distinguishable from the sibling task_relation_delete, and the body clarifies it is an upsert (create when absent, mutate when present).

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

Usage Guidelines4/5

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

The description explains the create-vs-update condition ('Without a relation of that role one is created... an existing one gets newRole and desc') and the meaning of every role value, which effectively tells an agent when to pick each. It stops short of naming alternatives or exclusions (e.g. routing to task_relation_delete or explaining prerequisites).

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

task_spec_syncA
Read-only
Inspect

Returns the context for updating a task's or bug's spec: spec, feature, recent chat, a code summary (basis=actual, with git read access) and the workspace's spec-update guidelines (instructions); writes nothing. mode=analyze - for "check, compare, propose" requests (differences and a full new version); mode=apply - when the user asks to update or sync. basis=requirements - "from the chat"; basis=actual - "from the code, as built".

NameRequiredDescriptionDefault
IDNoTask or bug ID; not with key
keyNoTask or bug number; not with ID
modeYesanalyze - propose without saving; apply - the user asks to apply
basisNorequirements (default) - confirmed in the chat; actual - actual state: code, designs, result
chatLimitNoLatest chat messages to return, 1-100 (default 20); older ones are read from the chat with a before cursor.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false; the description reinforces this with 'writes nothing' and adds genuinely new behavioral context — exactly what is returned, that analyze produces 'differences and a full new version', and that basis=actual depends on git read access. It stops short of describing pagination or output format, but the safety profile is fully covered.

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

Conciseness4/5

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

Front-loaded with the tool's purpose and the 'writes nothing' guarantee before the parameter mapping, and every clause carries information. It is dense in a single block rather than scannable segments, but there is no filler.

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

Completeness4/5

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

With no output schema, the description carries the return-value burden and does so by listing the returned artifacts and noting the git-read dependency for basis=actual. The one required param is covered; only minor edges like ID/key precedence and chatLimit behavior are left entirely to the schema.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3, but the description earns extra credit by explaining what mode=analyze actually yields (differences plus a full new version) and by grounding both enum params in the user's own words. It does not touch ID vs. key or chatLimit, which the schema already handles.

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

Purpose5/5

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

States a specific verb and resource (returns the context for updating a task's/bug's spec) and immediately enumerates the payload: spec, feature, recent chat, code summary, and workspace guidelines. The explicit 'writes nothing' plus the task/bug scoping distinguishes it from the sibling feature_spec_sync.

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

Usage Guidelines5/5

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

Maps user intent directly onto parameter values: mode=analyze is for 'check, compare, propose' requests, mode=apply is 'when the user asks to update or sync'; basis=requirements means 'from the chat' and basis=actual means 'from the code, as built'. An agent can select values straight from the user's phrasing with no inference.

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

task_takeAInspect

Takes a task or bug into work or returns to it (shared team data). The server picks the transition: a draft is published, a task in deployment goes back to work, an "any" stage is assigned to the token owner. A closed task is reopened on the token owner: they become the work assignee, the plan with its AI estimate and the closing resolution are cleared, a bug leaves its version; the approver, reviewer and tester stay. When the user decides that the previous assignee continues the work, their workAssignee is noted before the take; after it come finishing with wait and then a task update setting them as workAssignee. Another employee's stage is refused. Returns the job for the task, the available outcomes, where the task goes on done and on return, the task context and, once per session, the conventions for the work on a task and the memory for the job, unless the product context with the same runKey already delivered it.

NameRequiredDescriptionDefault
IDNoTask ID; preferred over key.
keyNoTask number without #, if the ID is unknown.
runYesSession counters accumulated since its start: runKey (the client session ID), model, usage (input, cacheRead, cacheWrite, output, including subagents), mcps (server to tool to calls), subagents and ms (active time); the snapshot at the start of the work on the task.
localRepositoriesNoIDs of the product repositories the task changes (the product's repositories), as in the product context.

TDQS

A4.1/5.0
Behavior5/5

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

With annotations declaring only non-readOnly/non-destructive, the description carries real load and delivers: server-side transition selection, exactly what a reopened task clears (assignee, plan with AI estimate, closing resolution) and what is preserved (approver, reviewer, tester), the bug-leaves-version behavior, and the refused-stage rule. This is well beyond what the annotations convey and is consistent with them (mutating, 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.

Conciseness4/5

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

The purpose is front-loaded, and each subsequent sentence adds operative detail (transition rules, reopen semantics, return payload), so little is wasted. The middle section is a dense run-on string of clauses that is harder to parse than it needs to be, keeping it short of a 5.

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

Completeness5/5

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

There is no output schema, so the description must explain returns and it does: the job for the task, available outcomes, where the task goes on done and on return, task context, and the once-per-session conventions/memory. Combined with the fully-covered input schema, an agent has enough to invoke and interpret it correctly.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents ID, key, run and localRepositories, including their descriptions. The description only indirectly touches runKey ('once per session... unless the product context with the same runKey already delivered it'), which concerns return behavior rather than parameter meaning, so baseline 3 is appropriate.

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

Purpose4/5

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

The opening sentence states a specific verb and resource ('Takes a task or bug into work or returns to it') and the mutations distinguished from siblings like task_done and task_publish. However, the meaning of 'take' relies on the following clause to become unambiguous, so it is clear but not instantly self-contained.

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

Usage Guidelines4/5

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

It spells out the conditions under which the server applies each transition (draft published, deployment back to work, 'any' stage assigned to token owner) and that 'another employee's stage is refused', which tells the agent when this call applies vs. not. It does not explicitly name sibling alternatives (e.g., when to prefer task_done over take), leaving some routing to inference.

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

task_updateA
Destructive
Inspect

Edits a task or bug (shared team data); only the passed fields change: title, spec, gist, result, priority, labels, placement (featureID or featureKey, featureID null removes it from the feature; versionID; productID), work iteration, bug fields (build, bugType, stage, browser, devices, fuzzy), type within its kind, modules and components (full new lists), stage assignees and ord. Stage assignees: employee uuid, "any" (any employee) or null (no such stage; the work stage always exists). Status is not changed here; returns link, status, specRevision and changed.

NameRequiredDescriptionDefault
IDNoTask ID; preferred over key.
keyNoTask number, if the ID is unknown.
ordNoPosition in lists, as drag-and-drop in the web UI; tasks go by ord descending (a feature's tasks follow its plan top down): a value between two neighbours' ord goes between them, above the largest - on top, 0 - last. When neighbours are under 100 apart, the feature's tasks, closed included, are renumbered top down from Date.now() in steps of -10000.
gistNoGist: one or two plain-text sentences "problem → solution", up to 300 characters, without Markdown, links or task keys, in the language of the workspace data; an empty string clears it.
specNoNew spec (requirements): Markdown in the language of the workspace data, HTML is rejected. Replaces the whole field - text, `::: doc` sections and `attach:`, `design:`, `color:` tokens left out are removed.
typeNoNew type: the work type for a task, the criticality for a bug; a task does not become a bug or back.
buildNoBuild where the defect was reproduced (bugs only).
fuzzyNoIntermittent bug: does not reproduce every time (bugs only).
stageNoStand where the bug was reproduced: dev - development and autotests, alpha - manual QA, prod - production data.
titleNoNew name
labelsNoLabels; an empty array removes all.
resultNoReport on the work done: Markdown in the language of the workspace data, HTML is rejected; replaces the whole field, like spec.
browserNoBrowser where the bug was reproduced (bugs only).
bugTypeNoDefect nature (bugs only): ui - interface, fn - functionality, ux - usability, spec - documentation; not the severity, which is type.
devicesNoIDs of devices from the company's QA devices where the bug was reproduced; an unknown ID is rejected. Bugs only; full new list, [] clears it.
priorityNoPriority; a human decision, set only at the user's explicit request.
featureIDNoFeature to move the task to; null removes it from its feature.
moduleIDsNoFull new list of module IDs, replacing the current one; [] removes all.
productIDNoProduct to move the task to; it lands in the product's current development version.
specPatchNoPart of the spec, ops in order: replace / insertBefore / insertAfter / delete a section by heading ("## Chat"; text - whole section), append, find an exact unique fragment → replace. With expectedSpecRevision.
versionIDNoVersion to move the task to when no feature fits.
featureKeyNoKey of the feature to move the task to (#F12), instead of featureID.
resultPatchNoLike specPatch, for result except QA notes; apart from spec.
componentIDsNoFull new list of the actually affected component IDs, replacing the current one; [] removes all, adding means the current ones plus new.
designUnlinkNotrue lets a spec / result write drop design markers (designs left unlinked are deleted); otherwise it is rejected.
testAssigneeNoTester; a bug always keeps its testing stage, null is rejected.
workAssigneeNoAssignee.
workTimePlanNoPlanned work time in minutes, per the assignee's role level
reviewAssigneeNoReviewer.
approvalAssigneeNoApprover.
workIterationDateNoA date within the work iteration, YYYY-MM-DD; moves the work to that iteration.
expectedSpecRevisionNoThe task's current specRevision; required when spec or specPatch changes. A spec with a revision goes in a separate request, with only gist and designUnlink alongside.

TDQS

A4.3/5.0
Behavior5/5

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

Beyond readOnly=false and destructive=true, it discloses full-field replacement and token deletion for spec/result, null-removal behavior for featureID, rejection of unknown device IDs, and the returned fields. These are exactly the destructive side effects an agent needs before invoking a mutation.

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

Conciseness4/5

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

The description front-loads purpose and key invariants and, given 32 parameters, remains dense with little filler. However, it is a single semicolon-heavy paragraph that would be easier to scan as structured groups, so it is not a 5.

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

Completeness4/5

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

For a 32-parameter mutation with no output schema, it covers the important behavioral gotchas and states the return fields, while annotations cover safety. Some operational details such as permissions, atomicity, and all parameter interactions are left to the rich schema, so it is strong but not exhaustive.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents all 32 parameters in detail; the description mainly summarizes parameter groups rather than adding syntax or constraints beyond it. It does reinforce 'only the passed fields change' and some relationships, but that is baseline-level value for a fully documented schema.

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

Purpose5/5

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

The opening 'Edits a task or bug' gives a precise verb and resource, and 'only the passed fields change' states the partial-update model. It also rules out status changes, so an agent can distinguish it from status-changing siblings such as task_done/task_take without opening another schema.

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

Usage Guidelines4/5

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

It explains when to use it for field-level edits and gives exclusions such as 'Status is not changed here' and priority being set only at explicit user request. It also notes that a spec with a revision must go in a separate request, but it does not name the sibling tools to use for the excluded operations, so it is not a full 5.

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

variable_saveA
Destructive
Inspect

Saves a variable for AI agents when the user asks to keep a value: an access, a token, an address or an environment setting. A secret (secret) is stored encrypted and is never returned in responses. If a variable with the same level, scope, path and key exists, the passed fields are replaced. Levels company, project and repository require memory:moderate; user and token are the user's own. With path the value is the file /run/agent/vars// on the agent VM, without path it is the environment variable key.

NameRequiredDescriptionDefault
keyYesEnvironment variable or file name.
descNoWhy and how it is used; shown to agents.
jobsNoKinds of work that need the variable; empty - all.
pathNoFile directory without a leading /.
typeNoDefaults to string.
levelYesScope: company, project, repository; user - the user's own; token - the token of this connection.
titleNoTitle: what it is.
valueYesValue: number - a number, json - valid JSON, binary - base64.
secretNotrue - a secret: stored encrypted, the value is not shown.
projectIDNoProject ID, for level = project.
allCompaniesNoFor level = user: true - in all of the user's companies; by default only in this one.
repositoryIDNoRepository ID, for level = repository.

TDQS

A4.2/5.0
Behavior5/5

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

Beyond the destructiveHint=true annotation, the description discloses that secrets are stored encrypted and never returned, that an existing same-level/scope/path/key variable has its passed fields replaced (explaining the destructive behavior), the required memory:moderate permission, and where the value physically lands (file path vs env var). This is unusually rich 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.

Conciseness4/5

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

The description is dense but front-loaded, opening with the purpose before moving to secret handling, upsert semantics, level permissions, and path behavior. Every sentence carries information, though it packs several distinct concerns into a single long paragraph.

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

Completeness4/5

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

For a 12-parameter mutation tool with no output schema, the description covers the highest-risk behaviors (overwrite, secret encryption, permissions, storage location) and notes that secrets are not returned. It omits any mention of return values or error cases, but with a 100%-covered schema and destructive annotations this is close to complete.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3, but the description adds real meaning: 'path' determines the file /run/agent/vars/<path>/<key> on the agent VM while omitting it produces an environment variable, and 'level' values are tied to permissions and ownership. It still leaves type/jobs/desc/title/allCompanies behavior entirely to the schema.

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

Purpose4/5

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

The description states a specific verb and resource ('Saves a variable') and adds the intended use case ('when the user asks to keep a value') plus the storage destinations (file under /run/agent/vars vs environment variable). It never names a sibling such as memory_create, so an agent cannot tell from this text alone how it differs from the memory_* family.

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

Usage Guidelines4/5

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

It gives a clear trigger ('when the user asks to keep a value') and prerequisites (company/project/repository levels need memory:moderate). It does not name an alternative tool or say when NOT to use this one, so the routing guidance is context-rich but not exhaustive.

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

version_releaseA
Destructive
Inspect

Releases a version: marks it completed with a release date, after which it is not offered for new work; isPublished also publishes it. Without releaseDT the version keeps its existing (possibly planned) date or gets the current date if it has none; the response has the resulting releaseDT. Irreversible; only at the user's explicit request.

NameRequiredDescriptionDefault
releaseDTNoRelease date, ISO.
versionIDYesVersion ID.
isPublishedNotrue - also publish the version.

TDQS

A4.2/5.0
Behavior5/5

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

Adds substantial context beyond the destructiveHint/readOnlyHint annotations: the post-release state ('not offered for new work'), the irreversibility, and the exact date-resolution behavior when releaseDT is omitted. This tells the agent what actually changes and what cannot be undone.

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

Conciseness4/5

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

Front-loads the core action and effects, with the irreversibility/explicit-request caveat last where it belongs. It is dense but every clause carries information; only mild run-on structure keeps it from a 5.

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

Completeness4/5

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

With no output schema, the description usefully notes the response contains the resulting releaseDT, and it covers side effects and irreversibility. Combined with full schema coverage and annotations, the agent has enough to call it correctly, though a brief nod to prerequisites/auth would make it complete.

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

Parameters4/5

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

Schema coverage is 100% (baseline 3), but the description adds real meaning: it explains that omitting releaseDT preserves the existing/planned date or defaults to today, and that isPublished also publishes. This goes beyond the terse schema descriptions.

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

Purpose4/5

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

States a specific verb+resource ('Releases a version') and adds the resulting state change ('marks it completed...not offered for new work'), which distinguishes the effect from a generic version_update. It does not explicitly name version_update as the alternative, so it falls short of full sibling differentiation.

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

Usage Guidelines4/5

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

Gives a clear usage constraint — 'only at the user's explicit request' — and flags irreversibility. It does not explicitly contrast with version_update or state a when-not condition, so it stops short of naming alternatives.

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

version_updateA
Destructive
Inspect

Creates a product version (without versionID; productID, major and minor are required, the title is built by the server) or changes a version's number, notes or design file (only the passed fields); does not release it. Changes shared product structure; only at the user's request or with their consent. Returns the version.

NameRequiredDescriptionDefault
buildNoBuild number, from 1; omitted - a "major.minor" version.
majorNoMajor part of the number.
minorNoMinor part of the number.
notesNoVersion notes in Markdown (no HTML), in the language of the workspace data. Replaces the whole field: existing text, `::: doc` sections and `attach:`, `design:`, `color:` tokens stay only if included.
productIDNoProduct ID of a new version.
versionIDNoVersion ID; omitted - a new version.
designFileUrlNoLink to the version's Figma file; null or empty - the product's main design file.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and readOnlyHint=false, and the description adds value beyond them: it warns that shared product structure is affected and that user consent is required, and it notes partial-update semantics ('only the passed fields'). It does not, however, describe reversibility or what the returned version contains beyond naming it.

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

Conciseness4/5

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

A single dense sentence with the create case front-loaded, followed by update scope, the release exclusion, and the consent caveat. Every clause carries information, though the nested parentheticals make it slightly harder to scan.

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

Completeness4/5

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

For a 7-parameter mutation tool with no output schema, it covers both modes, the partial-update rule, the consent requirement, and the return value ('Returns the version'). Missing only finer points such as reversibility or what happens to unspecified existing fields on update.

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

Parameters4/5

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

With 100% schema coverage the baseline is 3, but the description compensates with meaning the schema lacks: it states that productID, major and minor are required (the schema lists no required parameters), that versionID's absence triggers creation, that the title is server-built, and that updates are partial. This materially clarifies how to populate the parameters.

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

Purpose5/5

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

The description names the verb and resource precisely and covers both operating modes: creating a version (when versionID is absent) and updating number/notes/design file (only the passed fields). It also explicitly bounds scope with 'does not release it,' which routes the agent away from the sibling version_release.

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

Usage Guidelines4/5

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

Gives a clear conditional for use: 'Changes shared product structure; only at the user's request or with their consent,' plus the implied alternative of version_release for releasing. It stops short of naming version_release outright or spelling out when the create vs. update branch should be chosen.

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

worklog_listA
Read-only
Inspect

Lists worklog (time-tracking) records of tasks and bugs for time and cost reports; filters by task, feature, employee, period and task status combine (none - all accessible records), meetings excluded. Amounts the user may not see come as 0, meaning hidden, not unpaid; isActive marks ongoing work whose time and cost still grow. totals covers the whole selection, employees and tasks are in the users and tasks dictionaries, and the next page comes with nextCursor and the same filters.

NameRequiredDescriptionDefault
toNoPeriod end, YYYY-MM-DD inclusive, in the company's time zone.
fromNoPeriod start, YYYY-MM-DD inclusive, in the company's time zone.
limitNoRecords per page, up to 500 (default 100).
cursorNonextCursor of the previous page of the same request.
statusNoOnly work tracked while the task had this status, e.g. review - review time, testing - testing time.
taskIDNoTask or bug ID (preferred).
userIDNoEmployee ID: that employee's records.
taskKeyNoTask or bug number, if the ID is unknown.
featureIDNoFeature ID: all its tasks and bugs.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already mark it readOnly/non-destructive, yet the description adds substantial non-obvious semantics: zero amounts may mean hidden rather than unpaid, isActive flags work still accumulating time/cost, and totals covers the entire selection rather than the page. These are exactly the behaviors an agent could otherwise misread from raw output.

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

Conciseness4/5

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

Content is front-loaded with purpose first and returns last, and every clause carries information. The first sentence is dense to the point of run-on ('period and task status combine (none - all accessible records)'), which slightly impedes scanning.

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

Completeness4/5

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

With no output schema, the description does the heavy lifting on returns: totals scope, dictionary lookups for employees/tasks, nextCursor pagination, hidden amounts and isActive semantics. It stops short of stating the record shape, units of totals, or default ordering, so it is strong but not fully complete.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3, but the description adds interpretation beyond the schema: the status filter is a combination (none = all accessible records) and that the next page reuses the same filters, which clarifies how cursor relates to the other parameters.

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

Purpose5/5

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

States a specific verb and resource ('Lists worklog (time-tracking) records of tasks and bugs') plus the purpose ('for time and cost reports'), which is not restated from the name. No sibling tool covers worklog/time-tracking data, so the agent can unambiguously route here.

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

Usage Guidelines4/5

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

Names the filterable dimensions (task, feature, employee, period, task status) and clarifies that omitting the status filter returns all accessible records, plus that meetings are excluded. It gives clear context for when the tool applies but does not contrast it with an alternative or state hard exclusions.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updates
    • Changedfeature_update2 fields changed
      • changedInput schema / properties / expectedSpecRevision / description
        Previous value: -"The feature's current specRevision; required when spec changes. A spec with a revision goes in a separate request, with only gist and designUnlink alongside."New value: +"The feature's current specRevision; required when spec or specPatch changes. A spec with a revision goes in a separate request, with only gist and designUnlink alongside."
      • addedInput schema / properties / specPatch
        Added value: +{
        +  "description": "Part of the spec, ops in order: replace / insertBefore / insertAfter / delete a section by heading (\"## Chat\"; text - whole section), append, find an exact unique fragment → replace. With expectedSpecRevision.",
        +  "items": {
        +    "properties": {
        +      "find": {
        +        "maxLength": 200000,
        +        "type": "string"
        +      },
        +      "heading": {
        +        "maxLength": 300,
        +        "type": "string"
        +      },
        +      "op": {
        +        "enum": [
        +          "replace",
        +          "insertBefore",
        +          "insertAfter",
        +          "delete",
        +          "append",
        +          "find"
        +        ],
        +        "type": "string"
        +      },
        +      "replace": {
        +        "maxLength": 200000,
        +        "type": "string"
        +      },
        +      "text": {
        +        "maxLength": 200000,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op"
        +    ],
        +    "type": "object"
        +  },
        +  "minItems": 1,
        +  "type": "array"
        +}
    • Changedtask_update4 fields changed
      • changedInput schema / properties / designUnlink / description
        Previous value: -"true lets a spec / result write drop design markers (designs left without links are deleted); otherwise losing a marker is rejected."New value: +"true lets a spec / result write drop design markers (designs left unlinked are deleted); otherwise it is rejected."
      • changedInput schema / properties / expectedSpecRevision / description
        Previous value: -"The task's current specRevision; required when spec changes. A spec with a revision goes in a separate request, with only gist and designUnlink alongside."New value: +"The task's current specRevision; required when spec or specPatch changes. A spec with a revision goes in a separate request, with only gist and designUnlink alongside."
      • addedInput schema / properties / resultPatch
        Added value: +{
        +  "description": "Like specPatch, for result except QA notes; apart from spec.",
        +  "items": {
        +    "properties": {
        +      "find": {
        +        "maxLength": 200000,
        +        "type": "string"
        +      },
        +      "heading": {
        +        "maxLength": 300,
        +        "type": "string"
        +      },
        +      "op": {
        +        "enum": [
        +          "replace",
        +          "insertBefore",
        +          "insertAfter",
        +          "delete",
        +          "append",
        +          "find"
        +        ],
        +        "type": "string"
        +      },
        +      "replace": {
        +        "maxLength": 200000,
        +        "type": "string"
        +      },
        +      "text": {
        +        "maxLength": 200000,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op"
        +    ],
        +    "type": "object"
        +  },
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedInput schema / properties / specPatch
        Added value: +{
        +  "description": "Part of the spec, ops in order: replace / insertBefore / insertAfter / delete a section by heading (\"## Chat\"; text - whole section), append, find an exact unique fragment → replace. With expectedSpecRevision.",
        +  "items": {
        +    "properties": {
        +      "find": {
        +        "maxLength": 200000,
        +        "type": "string"
        +      },
        +      "heading": {
        +        "maxLength": 300,
        +        "type": "string"
        +      },
        +      "op": {
        +        "enum": [
        +          "replace",
        +          "insertBefore",
        +          "insertAfter",
        +          "delete",
        +          "append",
        +          "find"
        +        ],
        +        "type": "string"
        +      },
        +      "replace": {
        +        "maxLength": 200000,
        +        "type": "string"
        +      },
        +      "text": {
        +        "maxLength": 200000,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "op"
        +    ],
        +    "type": "object"
        +  },
        +  "minItems": 1,
        +  "type": "array"
        +}
  2. 11 tool updates
    • Addedbranch_list
    • Addedfeature_code_context
    • Addedrepo_blame
    • Addedrepo_compare
    • Addedrepo_context
    • Addedrepo_file
    • Addedrepo_history
    • Addedrepo_line_history
    • Addedrepo_search
    • Addedrepo_tree
    • Addedtask_code_context
  3. 11 tool updates
    • Removedbranch_list
    • Removedfeature_code_context
    • Removedrepo_blame
    • Removedrepo_compare
    • Removedrepo_context
    • Removedrepo_file
    • Removedrepo_history
    • Removedrepo_line_history
    • Removedrepo_search
    • Removedrepo_tree
    • Removedtask_code_context
  4. 10 tool updates
    • Changedbug_create4 fields changed
      • addedInput schema / properties / fuzzy
        Added value: +{
        +  "description": "Intermittent bug: does not reproduce every time.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / labels
        Added value: +{
        +  "description": "Labels.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / priority
        Added value: +{
        +  "description": "Priority; a human decision, set only at the user's explicit request.",
        +  "enum": [
        +    "postponed",
        +    "unset",
        +    "inOrder",
        +    "important",
        +    "urgent"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / type / description
        Previous value: -"Criticality by actual impact: bug_trivial - cosmetic; bug_minor - inconvenience with a workaround; bug_major - a function works wrong or part of a scenario is unavailable, the workaround is costly; bug_critical - a scenario is impossible, data is lost or corrupted, a section crashes; bug_block - blocks the product or all testing. In doubt between two levels - bug_major."New value: +"Criticality by actual impact: bug_trivial - cosmetic; bug_minor - inconvenience with a workaround; bug_major - a function works wrong or part of a scenario is unavailable, the workaround is costly; bug_critical - a scenario is impossible, data is lost or corrupted, a section crashes; bug_block - blocks the product or all testing. In doubt between two levels - the higher one."
    • Changedfeature_update2 fields changed
      • addedInput schema / properties / analytic
        Added value: +{
        +  "description": "New feature analyst: employee UUID or \"any\".",
        +  "type": "string"
        +}
      • changedInput schema / properties / expectedSpecRevision / description
        Previous value: -"The feature's current specRevision; required when spec changes."New value: +"The feature's current specRevision; required when spec changes. A spec with a revision goes in a separate request, with only gist and designUnlink alongside."
    • Changedmemory_create2 fields changed
      • addedInput schema / properties / productIDs
        Added value: +{
        +  "description": "For level = project: the products where the record is delivered. Products of its own project: only in them (none of them listed - in all products of the project); products of other projects: in them too.",
        +  "items": {
        +    "format": "uuid",
        +    "type": "string"
        +  },
        +  "maxItems": 50,
        +  "type": "array"
        +}
      • changedInput schema / properties / title / description
        Previous value: -"\"<area> · <situation or symptom>: <what's inside>\", up to 200 characters, in the language of the workspace data; agents judge relevance by it, and agents doing other kinds of work see it only up to \": \"."New value: +"\"<area> · <situation or symptom>: <what's inside>\", up to 200 characters, in the language of the workspace data; agents judge relevance by the title in the memory index."
    • Changedmemory_update2 fields changed
      • addedInput schema / properties / productIDs
        Added value: +{
        +  "description": "As when creating a record, the full list; [] - all products of the record's project.",
        +  "items": {
        +    "format": "uuid",
        +    "type": "string"
        +  },
        +  "maxItems": 50,
        +  "type": "array"
        +}
      • changedInput schema / properties / title / description
        Previous value: -"\"<area> · <situation or symptom>: <what's inside>\", up to 200 characters, in the language of the workspace data; agents judge relevance by it, and agents doing other kinds of work see it only up to \": \"."New value: +"\"<area> · <situation or symptom>: <what's inside>\", up to 200 characters, in the language of the workspace data; agents judge relevance by the title in the memory index."
    • Changedproduct_context2 fields changed
      • changedInput schema / properties / localRepositories / description
        Previous value: -"IDs of the product's repositories cloned locally; repository notes for dev - only for them; for review - the repositories of the reviewed MR, even without a clone, which narrows the reviewer's notes"New value: +"IDs of the product's repositories (repositories[].ID) that the task changes, not every clone on the machine; for review - the repositories of the MR, even without a clone. Repository notes: for dev - only for them, for review and devops - for them when given; no effect on analysis, qa and design"
      • addedInput schema / properties / runKey
        Added value: +{
        +  "description": "The client session ID, as run.runKey when a task is taken: the memory for the job delivered here is not repeated at the take; once the session has taken a task, the conventions for working on a task are included here in full too",
        +  "maxLength": 100,
        +  "minLength": 1,
        +  "type": "string"
        +}
    • Changedtask_create2 fields changed
      • addedInput schema / properties / labels
        Added value: +{
        +  "description": "Labels.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / priority
        Added value: +{
        +  "description": "Priority; a human decision, set only at the user's explicit request.",
        +  "enum": [
        +    "postponed",
        +    "unset",
        +    "inOrder",
        +    "important",
        +    "urgent"
        +  ],
        +  "type": "string"
        +}
    • Changedtask_done1 field changed
      • changedInput schema / properties / result / description
        Previous value: -"Result: in work - the whole result field (Markdown in the language of the workspace data, HTML is rejected; replaces the whole field); in testing - only the \"QA verification\" block placed at the end of the field; not accepted at approval and review."New value: +"Result: in work - the whole result field (Markdown in the language of the workspace data, HTML is rejected; replaces the whole field), the tester's \"QA verification\" block is kept by the server; in testing - only that block, placed by the server at the end of the field; not accepted at approval and review."
    • Changedtask_take1 field changed
      • changedInput schema / properties / localRepositories / description
        Previous value: -"IDs of the product repositories cloned locally."New value: +"IDs of the product repositories the task changes (the product's repositories), as in the product context."
    • Changedtask_update7 fields changed
      • changedInput schema / properties / expectedSpecRevision / description
        Previous value: -"The task's current specRevision; required when spec changes."New value: +"The task's current specRevision; required when spec changes. A spec with a revision goes in a separate request, with only gist and designUnlink alongside."
      • addedInput schema / properties / fuzzy
        Added value: +{
        +  "description": "Intermittent bug: does not reproduce every time (bugs only).",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / productID
        Added value: +{
        +  "description": "Product to move the task to; it lands in the product's current development version.",
        +  "format": "uuid",
        +  "type": "string"
        +}
      • changedInput schema / properties / testAssignee / description
        Previous value: -"Tester."New value: +"Tester; a bug always keeps its testing stage, null is rejected."
      • changedInput schema / properties / type / description
        Previous value: -"New work type (non-bugs only)."New value: +"New type: the work type for a task, the criticality for a bug; a task does not become a bug or back."
      • changedInput schema / properties / type / enum
        Previous value: -[
        -  "planning",
        -  "analysis",
        -  "design",
        -  "documentation",
        -  "research",
        -  "education",
        -  "other",
        -  "frontend",
        -  "backend",
        -  "fullstack",
        -  "devops",
        -  "tests",
        -  "freetest",
        -  "smoke",
        -  "regression",
        -  "testcase"
        -]New value: +[
        +  "planning",
        +  "analysis",
        +  "design",
        +  "documentation",
        +  "research",
        +  "education",
        +  "other",
        +  "frontend",
        +  "backend",
        +  "fullstack",
        +  "devops",
        +  "tests",
        +  "freetest",
        +  "smoke",
        +  "regression",
        +  "testcase",
        +  "bug_trivial",
        +  "bug_minor",
        +  "bug_major",
        +  "bug_critical",
        +  "bug_block"
        +]
      • addedInput schema / properties / workIterationDate
        Added value: +{
        +  "description": "A date within the work iteration, YYYY-MM-DD; moves the work to that iteration.",
        +  "type": "string"
        +}
    • Addedvariable_save
  5. 11 tool updates
    • Addedbranch_list
    • Addedfeature_code_context
    • Addedrepo_blame
    • Addedrepo_compare
    • Addedrepo_context
    • Addedrepo_file
    • Addedrepo_history
    • Addedrepo_line_history
    • Addedrepo_search
    • Addedrepo_tree
    • Addedtask_code_context
  6. 11 tool updates
    • Removedbranch_list
    • Removedfeature_code_context
    • Removedrepo_blame
    • Removedrepo_compare
    • Removedrepo_context
    • Removedrepo_file
    • Removedrepo_history
    • Removedrepo_line_history
    • Removedrepo_search
    • Removedrepo_tree
    • Removedtask_code_context
  7. 1 tool update
    • Addedtask_publish
  8. 11 tool updates
    • Addedbranch_list
    • Addedfeature_code_context
    • Addedrepo_blame
    • Addedrepo_compare
    • Addedrepo_context
    • Addedrepo_file
    • Addedrepo_history
    • Addedrepo_line_history
    • Addedrepo_search
    • Addedrepo_tree
    • Addedtask_code_context
  9. 11 tool updates
    • Removedbranch_list
    • Removedfeature_code_context
    • Removedrepo_blame
    • Removedrepo_compare
    • Removedrepo_context
    • Removedrepo_file
    • Removedrepo_history
    • Removedrepo_line_history
    • Removedrepo_search
    • Removedrepo_tree
    • Removedtask_code_context
  10. 4 tool updates
    • Removedtask_action
    • Addedtask_done
    • Removedtask_session_run
    • Addedtask_take
  11. 1 tool update
    • Addedtask_session_run
  12. 74 tool updates
    • Changedbranch_list2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / taskID / description
        Previous value: -"Only branches with this task's key."New value: +"Only this task's live branches, plus suggestedName."
    • Removedbranch_name
    • Changedbug_create19 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / approvalAssignee / description
        Previous value: -"Approver: employee UUID, \"any\" (any employee) or null (no approval stage); default: no approval."New value: +"Approver; default - no approval stage."
      • addedInput schema / properties / bugType
        Added value: +{
        +  "description": "Defect nature: ui - interface, fn - functionality, ux - usability, spec - documentation; not the severity, which is type.",
        +  "enum": [
        +    "ui",
        +    "fn",
        +    "ux",
        +    "spec"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / build / description
        Previous value: -"Build in which the defect was reproduced, from the deployed version; QA reproduces on it."New value: +"Build in which the defect was reproduced, from the deployed version."
      • changedInput schema / properties / featureKey / anyOf
        Previous value: -[
        -  {
        -    "maxLength": 12,
        -    "minLength": 1,
        -    "type": "string"
        -  },
        -  {
        -    "exclusiveMinimum": 0,
        -    "maximum": 9007199254740991,
        -    "type": "integer"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 12,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  {
        +    "exclusiveMinimum": 0,
        +    "type": "integer"
        +  }
        +]
      • changedInput schema / properties / featureKey / description
        Previous value: -"Feature key #F12 (or F12, 12); not with featureID"New value: +"Feature key #F12; not with featureID"
      • changedInput schema / properties / moduleIDs / description
        Previous value: -"IDs of the modules (screens) where the defect is visible, even if its cause is in a service."New value: +"IDs of the modules (screens) where the defect is visible."
      • changedInput schema / properties / ord / description
        Previous value: -"Position of the new bug; tasks are ordered by `ord` descending. Omitted - end of the feature's plan, so bugs created one by one keep their order."New value: +"Position of the new bug, as ord in task edits; omitted - the end of the feature's plan."
      • removedInput schema / properties / ord / maximum
        Removed value: -9007199254740991
      • changedInput schema / properties / reviewAssignee / description
        Previous value: -"Reviewer: employee UUID, \"any\" (any employee) or null (no review stage); default: no review."New value: +"Reviewer; default - no review stage."
      • addedInput schema / properties / stage
        Added value: +{
        +  "description": "Stand where the bug was reproduced: dev - development and autotests, alpha - manual QA, prod - production data.",
        +  "enum": [
        +    "dev",
        +    "alpha",
        +    "prod"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / testAssignee / description
        Previous value: -"Tester: employee UUID or \"any\" (any employee); default \"any\" - bugs are always tested."New value: +"Tester: employee UUID or \"any\" (default) - bugs are always tested."
      • changedInput schema / properties / testAssignee / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
      • changedInput schema / properties / title / description
        Previous value: -"Bug title, up to 200 characters, in the language of the workspace data; states the defect itself, not just the area (like \"Settings\")."New value: +"Bug title, up to 200 characters, in the language of the workspace data."
      • changedInput schema / properties / workAssignee / description
        Previous value: -"Assignee: employee UUID, \"any\" (any employee) or null (no work stage); default \"any\"."New value: +"Assignee; default \"any\"."
      • addedInput schema / properties / workIterationDate
        Added value: +{
        +  "description": "A date within the work iteration, YYYY-MM-DD; defaults to the current iteration.",
        +  "type": "string"
        +}
      • removedInput schema / properties / workIterationKey
        Removed value: -{
        -  "description": "Iteration key for work outside the current iteration; default - current",
        -  "maximum": 9007199254740991,
        -  "minimum": -9007199254740991,
        -  "type": "integer"
        -}
      • removedInput schema / properties / workTimePlan / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / workTimePlan / minimum
        Removed value: --9007199254740991
    • Changedchat_message_delete1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedchat_message_update2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / mentions
        Removed value: -{
        -  "description": "Not needed: mentions come from mention tokens in text",
        -  "items": {
        -    "format": "uuid",
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
    • Changedchat_question_inbox1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedchat_reaction1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedchat_read3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / after / description
        Previous value: -"Read messages newer than chat.after."New value: +"The after cursor from a response: newer messages."
      • changedInput schema / properties / before / description
        Previous value: -"Read messages older than chat.before."New value: +"The before cursor from a response: older messages."
    • Changedchat_send3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / chatID / description
        Previous value: -"Chat ID; for a task's chat - the task ID"New value: +"Chat ID; for a task's chat - the task ID, for the company's general chat - the company ID"
      • removedInput schema / properties / mentions
        Removed value: -{
        -  "description": "Not needed: mentions come from mention tokens in text",
        -  "items": {
        -    "format": "uuid",
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
    • Removedcomponent_create
    • Changedcomponent_update6 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / componentID / description
        Previous value: -"Component ID"New value: +"Component ID; omitted - a new component"
      • changedInput schema / properties / desc / description
        Previous value: -"New description, Markdown"New value: +"Description, Markdown"
      • addedInput schema / properties / productID
        Added value: +{
        +  "description": "Product ID of a new component",
        +  "format": "uuid",
        +  "type": "string"
        +}
      • changedInput schema / properties / title / description
        Previous value: -"New name"New value: +"Name"
      • removedInput schema / required
        Removed value: -[
        -  "componentID"
        -]
    • Changedcreate_rules1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedcurrency_convert1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changeddesign_comment_reply1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changeddesign_comments1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changeddesign_import5 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / featureKey / anyOf
        Previous value: -[
        -  {
        -    "maxLength": 12,
        -    "minLength": 1,
        -    "type": "string"
        -  },
        -  {
        -    "exclusiveMinimum": 0,
        -    "maximum": 9007199254740991,
        -    "type": "integer"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 12,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  {
        +    "exclusiveMinimum": 0,
        +    "type": "integer"
        +  }
        +]
      • changedInput schema / properties / featureKey / description
        Previous value: -"Feature key #F12 (or F12, 12); not with featureID"New value: +"Feature key #F12; not with featureID"
      • removedInput schema / properties / taskKey / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / taskKey / minimum
        Removed value: --9007199254740991
    • Removedevaluation_rules
    • Changedfeature_code_context3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / key / anyOf
        Previous value: -[
        -  {
        -    "maxLength": 12,
        -    "minLength": 1,
        -    "type": "string"
        -  },
        -  {
        -    "exclusiveMinimum": 0,
        -    "maximum": 9007199254740991,
        -    "type": "integer"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 12,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  {
        +    "exclusiveMinimum": 0,
        +    "type": "integer"
        +  }
        +]
      • changedInput schema / properties / key / description
        Previous value: -"Feature key #F12 (or F12, 12); not with featureID"New value: +"Feature key #F12; not with featureID"
    • Changedfeature_context3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / key / anyOf
        Previous value: -[
        -  {
        -    "maxLength": 12,
        -    "minLength": 1,
        -    "type": "string"
        -  },
        -  {
        -    "exclusiveMinimum": 0,
        -    "maximum": 9007199254740991,
        -    "type": "integer"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 12,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  {
        +    "exclusiveMinimum": 0,
        +    "type": "integer"
        +  }
        +]
      • changedInput schema / properties / key / description
        Previous value: -"Feature key #F12 (or F12, 12); not with featureID"New value: +"Feature key #F12; not with featureID"
    • Changedfeature_create2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / ord / maximum
        Removed value: -9007199254740991
    • Changedfeature_delete1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedfeature_list1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedfeature_search1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedfeature_spec_sync4 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / chatLimit / description
        Previous value: -"Latest messages per full context, 1-100; older via chat.before"New value: +"Latest messages per full context, 1-100; older ones are read from the chat with a before cursor."
      • changedInput schema / properties / key / anyOf
        Previous value: -[
        -  {
        -    "maxLength": 12,
        -    "minLength": 1,
        -    "type": "string"
        -  },
        -  {
        -    "exclusiveMinimum": 0,
        -    "maximum": 9007199254740991,
        -    "type": "integer"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 12,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  {
        +    "exclusiveMinimum": 0,
        +    "type": "integer"
        +  }
        +]
      • changedInput schema / properties / key / description
        Previous value: -"Feature key #F12 (or F12, 12); not with featureID"New value: +"Feature key #F12; not with featureID"
    • Changedfeature_update5 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / key / anyOf
        Previous value: -[
        -  {
        -    "maxLength": 12,
        -    "minLength": 1,
        -    "type": "string"
        -  },
        -  {
        -    "exclusiveMinimum": 0,
        -    "maximum": 9007199254740991,
        -    "type": "integer"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 12,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  {
        +    "exclusiveMinimum": 0,
        +    "type": "integer"
        +  }
        +]
      • changedInput schema / properties / key / description
        Previous value: -"Feature key #F12 (or F12, 12); not with featureID"New value: +"Feature key #F12; not with featureID"
      • changedInput schema / properties / ord / description
        Previous value: -"Position in the version, as drag-and-drop in the web UI; features go by `ord` ascending (tasks the opposite). Between two neighbours - a value between their ord; first - below the smallest; 0 - end of the version. Neighbours closer than 100 - the whole version, closed included, is renumbered top down from Date.now() - (N - 1) * 10000 in steps of +10000 for N features."New value: +"Position in the version, as drag-and-drop in the web UI; features go by `ord` ascending (tasks the opposite): a value between two neighbours' ord goes between them, below the smallest - first, 0 - end of the version. Neighbours closer than 100 - the version, closed included, is renumbered top down in steps of +10000, the last one at Date.now()."
      • removedInput schema / properties / ord / maximum
        Removed value: -9007199254740991
    • Changedfeed_work_queue3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / includePool / description
        Previous value: -"Add the shared \"any\" pool (poolBugs/poolTasks); default false."New value: +"Add the shared \"any\" pool (pool); default false."
      • addedInput schema / properties / statuses
        Added value: +{
        +  "description": "Only these groups; defaults to all.",
        +  "items": {
        +    "enum": [
        +      "approval",
        +      "work",
        +      "review",
        +      "testing"
        +    ],
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedfile_get3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / entity
        Removed value: -{
        -  "description": "Optional owner entity",
        -  "properties": {
        -    "ID": {
        -      "description": "Owner entity ID",
        -      "format": "uuid",
        -      "type": "string"
        -    },
        -    "type": {
        -      "description": "Owner entity type (task, feature, chatMessage, design, meeting...)",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "ID",
        -    "type"
        -  ],
        -  "type": "object"
        -}
      • changedInput schema / properties / fid / description
        Previous value: -"File ID: an attaches key and the fid in attach:<fid>"New value: +"File ID: an attaches key, the fid in attach:<fid> or a design file ID"
    • Removedfile_info
    • Changedfile_upload3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / properties / fid
        Added value: +{
        +  "description": "fid of a URL upload whose content has been PUT - completes the upload.",
        +  "format": "uuid",
        +  "type": "string"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "name"
        -]
    • Removedfile_upload_complete
    • Changedfile_url3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / entity
        Removed value: -{
        -  "description": "Optional owner entity",
        -  "properties": {
        -    "ID": {
        -      "description": "Owner entity ID",
        -      "format": "uuid",
        -      "type": "string"
        -    },
        -    "type": {
        -      "description": "Owner entity type (task, feature, chatMessage, design, meeting...)",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "ID",
        -    "type"
        -  ],
        -  "type": "object"
        -}
      • changedInput schema / properties / fid / description
        Previous value: -"File ID: an attaches key and the fid in attach:<fid>"New value: +"File ID: an attaches key, the fid in attach:<fid> or a design file ID"
    • Removediteration_key
    • Changedmemory_create2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / title / description
        Previous value: -"\"<area> · <situation or symptom>: <what's inside>\", up to 200 characters, in the language of the workspace data; agents judge relevance by it."New value: +"\"<area> · <situation or symptom>: <what's inside>\", up to 200 characters, in the language of the workspace data; agents judge relevance by it, and agents doing other kinds of work see it only up to \": \"."
    • Changedmemory_delete3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / version / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / version / minimum
        Removed value: --9007199254740991
    • Changedmemory_list1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedmemory_read2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / IDs / description
        Previous value: -"Rule slugs or memory record UUIDs from the `memory` index, up to 50."New value: +"Rule slugs or memory record UUIDs - the keys of the `memory` index, up to 50."
    • Changedmemory_update4 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / title / description
        Previous value: -"\"<area> · <situation or symptom>: <what's inside>\", up to 200 characters, in the language of the workspace data; agents judge relevance by it."New value: +"\"<area> · <situation or symptom>: <what's inside>\", up to 200 characters, in the language of the workspace data; agents judge relevance by it, and agents doing other kinds of work see it only up to \": \"."
      • removedInput schema / properties / version / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / version / minimum
        Removed value: --9007199254740991
    • Removedmodule_create
    • Changedmodule_update7 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / desc / description
        Previous value: -"New description, Markdown"New value: +"Description, Markdown"
      • changedInput schema / properties / moduleID / description
        Previous value: -"Module ID"New value: +"Module ID; omitted - a new module"
      • changedInput schema / properties / parentID / description
        Previous value: -"New parent module ID; null - make it a root module"New value: +"Parent module ID; null - a root module"
      • addedInput schema / properties / productID
        Added value: +{
        +  "description": "Product ID of a new module",
        +  "format": "uuid",
        +  "type": "string"
        +}
      • changedInput schema / properties / title / description
        Previous value: -"New name"New value: +"Name"
      • removedInput schema / required
        Removed value: -[
        -  "moduleID"
        -]
    • Changedproduct_context3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / job / description
        Previous value: -"Kind of work: analysis - analysis and specs; dev - code and automated tests (local repositories only); qa - manual testing; devops - CI, builds, deployment; review - code review; design - mockups"New value: +"Kind of work: analysis - analysis and specs; dev - code and automated tests (local repositories only); qa - manual testing; devops - CI, deployment, servers, logs and performance (code changes and MRs are dev; kinds can be combined, e.g. dev and devops); review - code review; design - mockups"
      • changedInput schema / properties / localRepositories / description
        Previous value: -"IDs of the product's repositories cloned locally"New value: +"IDs of the product's repositories cloned locally; repository notes for dev - only for them; for review - the repositories of the reviewed MR, even without a clone, which narrows the reviewer's notes"
    • Changedproduct_list1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedproduct_modules1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedproduct_update1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Removedqa_device_coverage
    • Changedrepo_blame3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / endLine / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / startLine / maximum
        Removed value: -9007199254740991
    • Removedrepo_branches
    • Changedrepo_compare2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / offset / maximum
        Removed value: -9007199254740991
    • Changedrepo_context1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedrepo_file5 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / endLine / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / files / items / properties / endLine / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / files / items / properties / startLine / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / startLine / maximum
        Removed value: -9007199254740991
    • Changedrepo_history2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / page / maximum
        Removed value: -9007199254740991
    • Changedrepo_line_history3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / endLine / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / startLine / maximum
        Removed value: -9007199254740991
    • Changedrepo_search1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedrepo_tree1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedsession_context1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedtask_action3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / key / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / key / minimum
        Removed value: --9007199254740991
    • Changedtask_code_context3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / key / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / key / minimum
        Removed value: --9007199254740991
    • Removedtask_commits
    • Changedtask_context5 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / chatLimit / maximum
        Previous value: -9007199254740991New value: +100
      • changedInput schema / properties / chatLimit / minimum
        Previous value: --9007199254740991New value: +1
      • removedInput schema / properties / key / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / key / minimum
        Removed value: --9007199254740991
    • Changedtask_create16 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / approvalAssignee / description
        Previous value: -"Approver: employee UUID, \"any\" (any employee) or null (no approval stage); default: no approval."New value: +"Approver; default - no approval stage."
      • changedInput schema / properties / featureKey / anyOf
        Previous value: -[
        -  {
        -    "maxLength": 12,
        -    "minLength": 1,
        -    "type": "string"
        -  },
        -  {
        -    "exclusiveMinimum": 0,
        -    "maximum": 9007199254740991,
        -    "type": "integer"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 12,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  {
        +    "exclusiveMinimum": 0,
        +    "type": "integer"
        +  }
        +]
      • changedInput schema / properties / featureKey / description
        Previous value: -"Feature key #F12 (or F12, 12); not with featureID"New value: +"Feature key #F12; not with featureID"
      • changedInput schema / properties / ord / description
        Previous value: -"Position of the new bug; tasks are ordered by `ord` descending. Omitted - end of the feature's plan, so bugs created one by one keep their order."New value: +"Position of the new task, as ord in task edits; omitted - the end of the feature's plan."
      • removedInput schema / properties / ord / maximum
        Removed value: -9007199254740991
      • changedInput schema / properties / reviewAssignee / description
        Previous value: -"Reviewer: employee UUID, \"any\" (any employee) or null (no review stage); default: no review."New value: +"Reviewer; default - no review stage."
      • changedInput schema / properties / spec / description
        Previous value: -"Spec (requirements) in the language of the workspace data, per the task creation template. Markdown (HTML is rejected); a write replaces the whole field, including `::: doc` sections and `attach:`, `design:`, `color:` tokens"New value: +"Spec (requirements) in the language of the workspace data, per the task creation template; Markdown, HTML is rejected."
      • changedInput schema / properties / testAssignee / description
        Previous value: -"Tester: employee uuid, \"any\" (any employee takes the stage) or null (no stage); default - no testing"New value: +"Tester; default - no testing stage."
      • changedInput schema / properties / title / description
        Previous value: -"Task title in the language of the workspace data, up to 200 characters, conveying the substance of the work rather than an area: \"Authorization\", \"List\", \"Settings\" are poor titles that don't distinguish the task"New value: +"Task title in the language of the workspace data, up to 200 characters."
      • changedInput schema / properties / type / description
        Previous value: -"Type by the nature of the work: planning, analysis, design, research, education, documentation, other - general tasks; frontend, backend, fullstack, devops, tests - development (client and server together - one fullstack task); freetest, smoke, regression, testcase - testing"New value: +"Work type by the nature of the work; the template depends on it."
      • changedInput schema / properties / workAssignee / description
        Previous value: -"Assignee: employee UUID, \"any\" (any employee) or null (no work stage); default \"any\"."New value: +"Assignee; default \"any\"."
      • addedInput schema / properties / workIterationDate
        Added value: +{
        +  "description": "A date within the work iteration, YYYY-MM-DD; defaults to the current iteration.",
        +  "type": "string"
        +}
      • removedInput schema / properties / workIterationKey
        Removed value: -{
        -  "description": "Iteration key for work outside the current iteration; default - current",
        -  "maximum": 9007199254740991,
        -  "minimum": -9007199254740991,
        -  "type": "integer"
        -}
      • removedInput schema / properties / workTimePlan / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / workTimePlan / minimum
        Removed value: --9007199254740991
    • Changedtask_delete3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / key / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / key / minimum
        Removed value: --9007199254740991
    • Changedtask_evaluate4 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / key / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / key / minimum
        Removed value: --9007199254740991
      • changedInput schema / properties / rulesRevision / description
        Previous value: -"Revision of the evaluation rules for this task type and stage."New value: +"Revision of the evaluation rules returned with the stage's evaluation data."
    • Changedtask_evaluation_context3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / key / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / key / minimum
        Removed value: --9007199254740991
    • Removedtask_relation_create
    • Changedtask_relation_delete6 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / key / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / key / minimum
        Removed value: --9007199254740991
      • removedInput schema / properties / otherKey / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / otherKey / minimum
        Removed value: --9007199254740991
      • changedInput schema / properties / role / description
        Previous value: -"Current role of the relation"New value: +"Relation role relative to the current task, as in its relations"
    • Changedtask_relation_update8 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / desc / description
        Previous value: -"New explanation; null or empty string — remove; omitted — unchanged"New value: +"Explanation; null or empty string — remove; omitted — unchanged"
      • removedInput schema / properties / key / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / key / minimum
        Removed value: --9007199254740991
      • changedInput schema / properties / newRole / description
        Previous value: -"New role relative to key; omitted — unchanged"New value: +"New role of an existing relation; omitted — unchanged"
      • removedInput schema / properties / otherKey / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / otherKey / minimum
        Removed value: --9007199254740991
      • changedInput schema / properties / role / description
        Previous value: -"Current role of the relation"New value: +"Relation role relative to the current task, as in its relations"
    • Changedtask_search1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedtask_spec_sync4 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / chatLimit / description
        Previous value: -"Latest chat messages to return, 1-100 (default 20); older via chat.before"New value: +"Latest chat messages to return, 1-100 (default 20); older ones are read from the chat with a before cursor."
      • removedInput schema / properties / key / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / key / minimum
        Removed value: --9007199254740991
    • Changedtask_update12 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / approvalAssignee / description
        Previous value: -"Approver: employee uuid, \"any\" (any employee) or null (no approval stage)."New value: +"Approver."
      • changedInput schema / properties / devices / description
        Previous value: -"IDs of devices from the company's QA devices: for a bug - where reproduced, for a task - where to test and where tested. Full new list; [] clears it."New value: +"IDs of devices from the company's QA devices where the bug was reproduced; an unknown ID is rejected. Bugs only; full new list, [] clears it."
      • changedInput schema / properties / featureKey / anyOf
        Previous value: -[
        -  {
        -    "maxLength": 12,
        -    "minLength": 1,
        -    "type": "string"
        -  },
        -  {
        -    "exclusiveMinimum": 0,
        -    "maximum": 9007199254740991,
        -    "type": "integer"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 12,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  {
        +    "exclusiveMinimum": 0,
        +    "type": "integer"
        +  }
        +]
      • removedInput schema / properties / key / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / key / minimum
        Removed value: --9007199254740991
      • changedInput schema / properties / ord / description
        Previous value: -"Position in lists, as drag-and-drop in the web UI. Tasks are sorted by ord DESCENDING (a feature's tasks follow its plan top down): a value between two neighbors' ord goes between them, above the largest - on top, 0 - last (the server assigns it). When neighbors are under 100 apart or the user asks for a re-sort, all of the feature's tasks including closed ones are renumbered: Date.now() for the top one, then steps of -10000."New value: +"Position in lists, as drag-and-drop in the web UI; tasks go by ord descending (a feature's tasks follow its plan top down): a value between two neighbours' ord goes between them, above the largest - on top, 0 - last. When neighbours are under 100 apart, the feature's tasks, closed included, are renumbered top down from Date.now() in steps of -10000."
      • removedInput schema / properties / ord / maximum
        Removed value: -9007199254740991
      • changedInput schema / properties / reviewAssignee / description
        Previous value: -"Reviewer: employee uuid, \"any\" (any employee) or null (no review stage)."New value: +"Reviewer."
      • changedInput schema / properties / testAssignee / description
        Previous value: -"Tester: employee uuid, \"any\" (any employee) or null (no testing stage)."New value: +"Tester."
      • changedInput schema / properties / workAssignee / description
        Previous value: -"Assignee: employee uuid or \"any\" (any employee); null is not allowed - the work stage always exists."New value: +"Assignee."
      • changedInput schema / properties / workTimePlan / anyOf
        Previous value: -[
        -  {
        -    "maximum": 9007199254740991,
        -    "minimum": -9007199254740991,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Removeduser_context
    • Changeduser_search2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / properties / userID
        Added value: +{
        +  "description": "One employee by ID, with the full profile; other filters are ignored.",
        +  "format": "uuid",
        +  "type": "string"
        +}
    • Removedversion_create
    • Changedversion_release1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedversion_update11 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / build / description
        Previous value: -"New build number, from 1 (there is no build 0)."New value: +"Build number, from 1; omitted - a \"major.minor\" version."
      • removedInput schema / properties / build / maximum
        Removed value: -9007199254740991
      • changedInput schema / properties / major / description
        Previous value: -"New major part of the number."New value: +"Major part of the number."
      • removedInput schema / properties / major / maximum
        Removed value: -9007199254740991
      • changedInput schema / properties / minor / description
        Previous value: -"New minor part of the number."New value: +"Minor part of the number."
      • removedInput schema / properties / minor / maximum
        Removed value: -9007199254740991
      • changedInput schema / properties / notes / description
        Previous value: -"New version notes in Markdown (no HTML), in the language of the workspace data. Replaces the whole field: existing text, `::: doc` sections and `attach:`, `design:`, `color:` tokens stay only if included."New value: +"Version notes in Markdown (no HTML), in the language of the workspace data. Replaces the whole field: existing text, `::: doc` sections and `attach:`, `design:`, `color:` tokens stay only if included."
      • addedInput schema / properties / productID
        Added value: +{
        +  "description": "Product ID of a new version.",
        +  "format": "uuid",
        +  "type": "string"
        +}
      • changedInput schema / properties / versionID / description
        Previous value: -"Version ID."New value: +"Version ID; omitted - a new version."
      • removedInput schema / required
        Removed value: -[
        -  "versionID"
        -]
    • Changedworklog_list3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / taskKey / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / taskKey / minimum
        Removed value: --9007199254740991
  13. 14 tool updates
    • Addedbranch_list
    • Addedbranch_name
    • Addedfeature_code_context
    • Addedrepo_blame
    • Addedrepo_branches
    • Addedrepo_compare
    • Addedrepo_context
    • Addedrepo_file
    • Addedrepo_history
    • Addedrepo_line_history
    • Addedrepo_search
    • Addedrepo_tree
    • Addedtask_code_context
    • Addedtask_commits
  14. 14 tool updates
    • Removedbranch_list
    • Removedbranch_name
    • Removedfeature_code_context
    • Removedrepo_blame
    • Removedrepo_branches
    • Removedrepo_compare
    • Removedrepo_context
    • Removedrepo_file
    • Removedrepo_history
    • Removedrepo_line_history
    • Removedrepo_search
    • Removedrepo_tree
    • Removedtask_code_context
    • Removedtask_commits
  15. 3 tool updates
    • Changedbug_create2 fields changed
      • addedInput schema / properties / browser
        Added value: +{
        +  "description": "Browser where the defect was reproduced.",
        +  "enum": [
        +    "any",
        +    "chrome",
        +    "safari",
        +    "opera",
        +    "edge",
        +    "firefox",
        +    "yandex"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / devices
        Added value: +{
        +  "description": "IDs of devices from the company's QA devices where the defect was reproduced.",
        +  "items": {
        +    "format": "uuid",
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Addedqa_device_coverage
    • Changedtask_update1 field changed
      • addedInput schema / properties / devices
        Added value: +{
        +  "description": "IDs of devices from the company's QA devices: for a bug - where reproduced, for a task - where to test and where tested. Full new list; [] clears it.",
        +  "items": {
        +    "format": "uuid",
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
  16. 1 tool update
    • Changedtask_action1 field changed
      • addedInput schema / properties / attachments
        Added value: +{
        +  "description": "fids of uploaded files, up to 5: attachments of the comment, posted in the same message, e.g. defect screenshots with reject.",
        +  "items": {
        +    "format": "uuid",
        +    "type": "string"
        +  },
        +  "maxItems": 5,
        +  "type": "array"
        +}
  17. 73 tool updates
    • First observedbranch_list
    • First observedbranch_name
    • First observedbug_create
    • First observedchat_message_delete
    • First observedchat_message_update
    • First observedchat_question_inbox
    • First observedchat_reaction
    • First observedchat_read
    • First observedchat_send
    • First observedcomponent_create
    • First observedcomponent_update
    • First observedcreate_rules
    • First observedcurrency_convert
    • First observeddesign_comment_reply
    • First observeddesign_comments
    • First observeddesign_import
    • First observedevaluation_rules
    • First observedfeature_code_context
    • First observedfeature_context
    • First observedfeature_create
    • First observedfeature_delete
    • First observedfeature_list
    • First observedfeature_search
    • First observedfeature_spec_sync
    • First observedfeature_update
    • First observedfeed_work_queue
    • First observedfile_get
    • First observedfile_info
    • First observedfile_upload
    • First observedfile_upload_complete
    • First observedfile_url
    • First observediteration_key
    • First observedmemory_create
    • First observedmemory_delete
    • First observedmemory_list
    • First observedmemory_read
    • First observedmemory_update
    • First observedmodule_create
    • First observedmodule_update
    • First observedproduct_context
    • First observedproduct_list
    • First observedproduct_modules
    • First observedproduct_update
    • First observedrepo_blame
    • First observedrepo_branches
    • First observedrepo_compare
    • First observedrepo_context
    • First observedrepo_file
    • First observedrepo_history
    • First observedrepo_line_history
    • First observedrepo_search
    • First observedrepo_tree
    • First observedsession_context
    • First observedtask_action
    • First observedtask_code_context
    • First observedtask_commits
    • First observedtask_context
    • First observedtask_create
    • First observedtask_delete
    • First observedtask_evaluate
    • First observedtask_evaluation_context
    • First observedtask_relation_create
    • First observedtask_relation_delete
    • First observedtask_relation_update
    • First observedtask_search
    • First observedtask_spec_sync
    • First observedtask_update
    • First observeduser_context
    • First observeduser_search
    • First observedversion_create
    • First observedversion_release
    • First observedversion_update
    • First observedworklog_list

Publisher details

Operator
Soft-Artel · Publisher source
Vendor relationship
Not applicable
Documentation
Unknown
Trust center
Unknown
Restrictions
Not available

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources