Kaiku
Server Details
Kaiku is an issue tracker with a wiki, built so that people and AI agents work in the same place. Its hosted MCP server lets an agent search, read, file and update issues, comment and answer questions, read and write wiki pages, and attach files — with the permissions of the person whose token it uses. Create a token in Settings → Connect over MCP and send it as Authorization: Bearer (or in X-Api-Key); the token says which workspace.
- Status
- Healthy
- Uptime
- 99.9% over 42 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 203 tools
The set covers many distinct domains, but 203 tools create numerous near-neighbours: search_issues vs find_issues, get_linked_jira_issue vs get_jira_link, list_credentials vs list_secret_files, and many create_/set_/update_ embed and admin tools. Descriptions usually clarify boundaries, but an agent must read long text to choose correctly.
Most names follow a snake_case verb_noun pattern (create_issue, get_wiki_page, list_sources, set_claim_status), making the surface predictable. A handful are noun-only or irregular (term_graph, product_help, site_traffic, local_files_setup, cite), which are minor deviations rather than chaotic.
203 tools is far beyond a well-scoped 3-15 surface and spans issue tracking, wiki, chat, admin billing, legal registers, support, embeds, code search, and more. This creates an extreme discovery and context burden for an agent even if each tool is individually justified.
The surface is exceptionally broad: issue lifecycle, comments, attachments, wiki pages/reviews/approvals, chats, projects, versions, rules, registers, support, and admin reporting are covered. Some lifecycle gaps remain (no delete_issue, delete_comment, or delete_project), but many are intentional or workable around.
Available Tools
203 toolsadd_attachmentAdd attachmentADestructiveInspect
Attach a file to an issue: pass its bytes as 'contentBase64', or its content as 'text' when the file is text. Attaching a filename the issue already has replaces that file rather than adding a second copy, so retrying this call cannot double it. A file on the person's own disk — a screenshot, a PDF — is better attached by path through the pm-files MCP server than typed out as base64; local_files_setup says how to connect it. Returns the attachment's download URL. Requires permission to edit issues in that project.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Issue key, e.g. 'UK-1'. | |
| text | No | The file's content as text, stored as UTF-8 — for a log, CSV or Markdown file you are writing here. Alternative to 'contentBase64'; passing both is refused. | |
| filename | Yes | File name to store, e.g. 'report.pdf'. Any directory part is dropped. | |
| mimeType | No | Content type to record for the listing, e.g. 'text/csv'. Ignored when the bytes identify themselves (a PNG is a PNG whatever you call it), and never used to serve the file. | |
| contentBase64 | No | The file's bytes, base64-encoded (a 'data:…;base64,…' URL is accepted and unwrapped). Use 'text' instead when the file is text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true; the description earns credit for making that concrete — attaching an existing filename replaces that file rather than duplicating, so retries cannot double it. It also discloses the required permission (edit issues in the project) and that it returns a download URL. Only size limits or failure modes are left unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, core action front-loaded, then the replacement/idempotency guarantee, then the alternative path, then return value and permission. No sentence restates the schema or the annotations verbatim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-param mutation tool with no output schema, it covers what an agent needs: content encoding choice, replacement semantics, the preferred alternative for local files, the returned URL, and the permission gate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each param is well documented, so the baseline is 3. The description adds real value on top by framing text vs contentBase64 as a decision with a mutual-exclusion rule and by pointing at an external server for the local-path case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource plus scope ('Attach a file to an issue'), and immediately enumerates the two content modes. The scope word 'issue' distinguishes it from the sibling add_wiki_attachment without needing to name it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use-which guidance: 'contentBase64' for bytes, 'text' when the file is text, and routes local-disk files (screenshots, PDFs) to the pm-files MCP server via local_files_setup rather than base64. It also tells the agent that retrying is safe, which is a usage condition in itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_commentAdd commentAInspect
Add a comment to an issue, or reply to one of its comments ('replyTo' is a comment id from get_comments). A reply notifies the author of the comment it answers, whether or not they watch the issue — no mention needed — and they are told once even if also mentioned. Requires permission to comment in that project (read-only members cannot). Answers with 'notified' (who this actually reaches, the answered author included), 'answered' (for a reply: whose comment it answers, and 'notified' false with a 'reason' when they are not told) and 'unresolvedMentions' (what looked like a mention and reached nobody, each with a reason) — a wrong handle is stored as written and never refused, so that list is the only sign it did not land. Where the workspace has agents, [~agent:role] (e.g. [~agent:product]) calls one to answer in the thread on your behalf: 'agents' lists each call with its requestId and status, and an agent that will not come is in 'unresolvedMentions' with its reason (agent_unknown, agent_off, agent_plan, agent_budget, too_many, agent_outsider — the writer is not of the company).
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Issue key, e.g. 'UK-1'. | |
| body | Yes | Comment body. Markdown is kept as written, and carries $…$ / $$…$$ LaTeX formulas and [~username] mentions (the username, which list_users hands you ready-made — never the display name). | |
| replyTo | No | The comment this one answers, as returned by get_comments — on the same issue and not deleted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond annotations (which only say non-read-only, non-destructive, closed-world): discloses notification fan-out rules (answered author told once even if mentioned), authorization requirements, that wrong handles are silently stored, and the agent-invocation protocol with its failure reasons. This is rich behavioral context an agent cannot get from structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action, but the remainder is a single dense paragraph with very long sentences mixing reply semantics, return fields, and agent behavior. Information is mostly earned, but the packing hurts scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and only basic annotations, the description anticipates the return payload ('notified', 'answered', 'unresolvedMentions', 'agents') and failure modes, and covers permissions and mention pitfalls. An agent has everything needed to call it and interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents key, body (Markdown/LaTeX/[~username] via list_users) and replyTo (same issue, not deleted). The description restates much of that and adds only marginal detail (the [~agent:role] syntax), so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (add) and resource (comment on an issue), plus the reply variant, and implicitly distinguishes itself from update_comment/get_comments by naming get_comments as the id source. An agent can tell this creates a comment rather than editing one.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear conditions: use 'replyTo' with a comment id from get_comments to answer a specific comment, and states the permission prerequisite (read-only members cannot comment). It does not explicitly contrast with update_comment or add_wiki_comment, so it falls short of naming alternatives/exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_legal_referenceAdd legal referenceAInspect
Put a reference to a legal act on an issue or a wiki page — as «Add» in the block «Legal acts» does: it is yours, accepted at once. 'url' is the act's address on one of the official sites acts are read from (a refusal lists them); an act not read yet is read in the background, so 'hasText' may be false at first. 'place' is the place in the act in words («Article 18»). With 'commentId' the reference stands in that comment instead of the issue's or the page's own text. The same place of the same act already there is that reference ('added' false). Requires permission to edit the issue or the page — to comment, for a comment's — and a project that keeps legal references.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The act's address, e.g. 'https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32015L0849'. | |
| page | No | Wiki page id. Either this or 'issue'. | |
| issue | No | Issue key, e.g. 'UK-1'. Either this or 'page'. | |
| place | No | The place in the act, in words, e.g. 'Article 18'. | |
| commentId | No | A comment on that issue or page the reference stands in (an id from get_comments), instead of the issue's or the page's own text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (readOnly false, destructive false): it discloses idempotency ('same place of same act already there → added false'), asynchronous act fetching ('hasText may be false at first'), and required permissions. These are exactly the traits an agent needs to avoid misinterpreting a success.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening verb+resource is front-loaded, but the body is a dense run of parenthetical clauses and abrupt fragments ('it is yours, accepted at once') that hurt scannability. Several sentences could be tightened without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter mutation with no output schema, the description covers targets (issue/page/comment), permissions, background-processing side effects, and the idempotent result signal. Nothing essential for a correct call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description still adds meaning: url must point to an official source site, place is stated in words ('Article 18'), and commentId anchors the reference inside a comment rather than the issue/page body. This enriches rather than repeats the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Put a reference to a legal act on an issue or a wiki page') and scopes the target objects, which clearly separates it from siblings like add_attachment or add_comment. The analogy to the UI 'Add' in the 'Legal acts' block makes the operation unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the conditions for use: it requires a project that keeps legal references and permission to edit the issue/page (or comment). It clarifies the commentId alternative, but never names sibling tools such as list_legal_references or remove_legal_reference to route the agent explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_to_showcaseAdd to showcaseAInspect
Show one issue, one wiki page or one claim of a PRIVATE project in a public project of the same company — by reference, not as a copy: anybody, signed in or not, can then read that issue (with its comments and files) or that page as it is now, and every later edit; the rest of its project stays closed, and its links to other closed things are counted, never named. A claim is shown with its statement and its status as the register says it — the same status inside and outside — and is cited on the public project's pages by its label. Give exactly one of issueKey, pageId or claimId. Only the owner of the project it belongs to may, and only if they also administer the public project; the public project must be public. Written to both projects' journals. Confirm with the person first: what it shows becomes readable by the whole internet.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | No | The wiki page to show, by its id. | |
| claimId | No | The claim to show, by its id (list_claims): its statement and its status, which moves with the register's journal; the journal itself is not shown. | |
| edition | No | For a page: 'current' (default) shows its words as they are now and every later edit; 'approved' shows only its edition in force (approve_wiki_page) — later edits stay unseen until approved, and the page shows nothing while no approval stands. Asking again with the other word switches a page already shown. | |
| issueKey | No | The issue to show, e.g. 'MATH-41'. | |
| projectKey | Yes | Key of the public project that will show it, e.g. 'D5'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations only declaring a non-readonly, non-destructive, non-open-world write, the description carries substantial extra context: the audience becomes the whole internet (even anonymous readers), later edits propagate, the rest of the source project stays closed, links to closed items are counted but never named, and claim status mirrors the register. It also discloses side effects (both projects' journals) and the irreversibility implied by publication.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and irreversibility framing are front-loaded and every clause carries information (permissions, propagation, journaling, confirmation). The prose is dense and clause-chained, which costs some readability, but it is not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter mutation tool with no output schema, the description covers the permission model, mutex on selector parameters, propagation semantics, audit journaling, and the human-confirmation warning — everything an agent needs before calling it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds a genuine constraint absent from the schema: exactly one of issueKey, pageId or claimId must be supplied. It also clarifies that edition is page-only and that re-calling switches the shown editions, adding meaning beyond the field docs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb and resource set ('Show one issue, one wiki page or one claim of a PRIVATE project in a public project') and immediately scopes it as 'by reference, not as a copy', which separates it from copy/create siblings and from list_showcase/remove_from_showcase.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives strong when-conditions and prerequisites: exactly one of issueKey/pageId/claimId, only the owning project's owner who also administers the public project, and the target must be public. It also says to confirm with the person first. It does not name the sibling for undoing this (remove_from_showcase) or for reviewing what is already shown (list_showcase), so 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.
add_wiki_attachmentAdd wiki attachmentADestructiveInspect
Attach a file to a wiki page, identified by 'pageId' or by 'spaceKey' + 'title': pass its bytes as 'contentBase64', or its content as 'text' when the file is text. Re-attaching a filename the page already has replaces its bytes and bumps its version, as the wiki does everywhere else, so retrying this call cannot leave two copies. A file on the person's own disk — a screenshot, a PDF — is better attached by path through the pm-files MCP server than typed out as base64; local_files_setup says how to connect it. An attached file is not on the page until the body references it — the answer hands you the Markdown to add with update_wiki_page. An image may also carry a dark-theme version, attached as the same name with '-dark' before the extension (diagram.svg + diagram-dark.svg); the body still references the plain name. Requires permission to edit the page.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | The file's content as text, stored as UTF-8 — for a log, CSV or Markdown file you are writing here. Alternative to 'contentBase64'; passing both is refused. | |
| title | No | Exact page title, when identifying the page by title. | |
| pageId | No | Page id (as returned by search_wiki). | |
| comment | No | Short note about this upload, shown in the page's attachment list. | |
| filename | Yes | File name to store, e.g. 'diagram.png'. Any directory part is dropped. | |
| mimeType | No | Content type to record for the listing, e.g. 'text/csv'. Ignored when the bytes identify themselves, and never used to serve the file. | |
| spaceKey | No | Space key, when identifying the page by title. | |
| contentBase64 | No | The file's bytes, base64-encoded (a 'data:…;base64,…' URL is accepted and unwrapped). Use 'text' instead when the file is text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and readOnlyHint=false; the description earns its keep by explaining exactly what that destruction means — re-attaching the same filename replaces the bytes and bumps the version, so retries are idempotent and cannot produce duplicate copies. It also discloses the permission requirement to edit the page and the dark-theme variant naming convention, none of which appear in the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Information-dense and front-loaded: identifying scheme, content modes, then idempotency, then routing advice, then the follow-up step. It is longer than most descriptions, but nearly every sentence carries a constraint the agent could not infer, so only minor tightening is possible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter mutation tool with no output schema, the description covers the addressing semantics, the return value ('the answer hands you the Markdown'), the permission prerequisite, and the follow-up call required to make the attachment appear in the page body. Nothing an agent needs in order to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3. The description still adds meaning the schema doesn't: the valid page-identification combinations, the 'contentBase64' vs 'text' exclusivity, and the '-dark' before-extension convention for dark-theme image variants. That extra is modest because the schema already documents each parameter individually.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (attach a file to a wiki page) and immediately gives the two addressing modes ('pageId' or 'spaceKey' + 'title') and the two content modes (bytes vs 'text'). This is clearly distinguishable from the sibling add_attachment (non-wiki) and from delete_wiki_attachment/get_wiki_attachment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: use the pm-files MCP server by path instead for local files like screenshots or PDFs (pointing to local_files_setup), and use 'text' rather than base64 for text files. It also names the follow-up step, telling the agent the attachment is not visible on the page until update_wiki_page adds the returned Markdown reference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_wiki_commentAdd wiki commentAInspect
Comment on a wiki page, or reply to one of its comments ('replyTo' is a comment id from get_wiki_page). A reply notifies the author of the comment it answers, whether or not they watch the page — no mention needed — and they are told once even if also mentioned. Identify the page by 'pageId', or by 'spaceKey' + 'title'. Markdown is rendered; mention someone as @Their Name, the wiki's own form. Requires permission to comment in that project. Answers with 'notified' (who this actually reaches, the answered author included), 'answered' (for a reply: whose comment it answers, and 'notified' false with a 'reason' when they are not told) and 'unresolvedMentions' (what looked like a mention and reached nobody, each with a reason) — a wrong handle is stored as written and never refused, so that list is the only sign it did not land.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Comment body as Markdown, which also carries $…$ / $$…$$ LaTeX formulas. | |
| title | No | Exact page title, when identifying the page by title. | |
| pageId | No | Page id (as returned by search_wiki). | |
| replyTo | No | The comment this one answers, as returned by get_wiki_page. | |
| spaceKey | No | Space key, when identifying the page by title. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations only indicating non-read-only and non-destructive behavior, the description adds the notification side effect (author notified once even if also mentioned), the permission requirement, Markdown/mention rendering rules, and the fact that a wrong handle is stored as written and never refused. This is substantial behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It front-loads the action and packs notification, mention, permission, and return-value details without filler. However, it is a dense semicolon-heavy paragraph, so structure could be easier to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description fully explains the return fields 'notified', 'answered', and 'unresolvedMentions', including why 'unresolvedMentions' matters. Given the mutation complexity and auth requirements, it covers what an agent needs 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description adds that 'replyTo' is a comment id from 'get_wiki_page', that the page can be identified by 'pageId' or 'spaceKey' + 'title', and that the body supports rendered Markdown plus the wiki mention form. It does not document every parameter's full constraints, but it adds useful semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first clause gives a specific verb and resource ('Comment on a wiki page') and immediately distinguishes the reply mode via 'replyTo'. It also names where 'replyTo' comes from ('get_wiki_page'), so an agent can tell this apart from a generic comment tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the two use cases (new comment vs. reply), how to identify the page ('pageId', or 'spaceKey' + 'title'), and the prerequisite permission to comment. It does not explicitly route agents to 'update_wiki_comment' or 'add_comment' for other comment operations, so it is clear but not fully alternative-aware.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
admin_bank_transferAdmin bank transferARead-onlyInspect
Administrators only: where a bank transfer is to be sent (PM-625) — beneficiary, account and its own currency, bank and SWIFT, the intermediary bank if there is one, the purpose line, how many days a wire is given, and who last changed all of it. 'offered' is the one flag that answers «may a customer pick a transfer right now»: it is switched on AND carrying everything a payment needs, which is not the same as 'enabled'. A bill already issued carries its own frozen copy of these details and is not changed by what this returns. Amounts are always USD, whatever the account's own currency is.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, non-destructive, closed-world), and the description adds real context on top: an admin-only authorization requirement, the exact semantics of the 'offered' flag versus 'enabled', and the fact that already-issued bills carry a frozen copy unaffected by this response. It stops short of describing response shape or ordering.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the admin gate and the resource, and every subsequent clause carries substantive domain meaning — the 'offered'/'enabled' distinction and the frozen-bill immutability note both earn their place. The first sentence is a long run-on list, which costs some readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters and no output schema, the description carries the return-value burden and does so well: it enumerates the returned fields, explains the derived 'offered' flag, and states the currency behavior. The only gap is the missing hand-off to the mutating counterpart.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so there is nothing to disambiguate; baseline 4 applies. The description productively spends its space on the meaning of returned fields instead, notably clarifying 'offered' vs 'enabled' and the USD normalization.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description makes clear this surfaces the current bank-transfer destination configuration, and it enumerates the specific fields involved (beneficiary, account, bank/SWIFT, intermediary, purpose line, wire days, last editor). It never names the obvious sibling, admin_set_bank_transfer, so the read-vs-write distinction has to be inferred from the annotations and the phrase 'is not changed by what this returns'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Administrators only' gives an access precondition, and the content implies this is a read of live settings. But there is no explicit when-to-use statement and no routing to the alternative — an agent wanting to modify these values gets no pointer to admin_set_bank_transfer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
admin_errors_weekAdmin errors weekARead-onlyInspect
Administrators only: the error collector's week — events and distinct errors per project against the week before, errors first seen that week with their release, the loudest by events and by people, and errors that came back after being resolved. The same numbers the weekly error report carries. A project the collector did not answer about has null counts and a reason, never zeros. Ask for an earlier week with weeksAgo.
| Name | Required | Description | Default |
|---|---|---|---|
| weeksAgo | No | 0 is the last full week, 1 the one before it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover read-only/non-destructive/open-world, but the description adds real behavioral context the agent can't get elsewhere: admin gating, the null-counts-plus-reason semantics for unanswered projects ("never zeros", a genuine misinterpretation trap), and that the numbers match the weekly error report.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded access constraint, then contents, then the null-vs-zero caveat, then the parameter hint — a sensible order with little waste. The middle enumeration is dense and slightly list-like in prose, but each item signals report scope the agent needs to judge relevance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 compensates by enumerating the report's sections and explicitly documenting the null/reason representation instead of raw values. For a single-parameter read tool, nothing needed to call it or interpret results is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With one parameter at 100% schema coverage, the schema already defines weeksAgo's 0/1 semantics. The description's "Ask for an earlier week with weeksAgo" confirms intent but adds no format, range bounds, or behavior for larger values, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
A specific verb-and-resource-by-scope statement: the error collector's week, itemized into events/distinct errors per project, week-over-week, first-seen, loudest, and regressed errors. An agent can tell immediately this is the weekly error digest rather than the funnel/landing-week or general overview siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Administrators only" is an explicit access prerequisite, and "Ask for an earlier week with weeksAgo" tells the agent how to reach historical weeks. It stops short of naming alternatives or when-not-to-use (e.g., vs admin_overview or admin_funnel), so no explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
admin_funnelAdmin funnelARead-onlyInspect
Administrators only: the installation as a business over a period — registrations, how many of them became working companies, purchases and conversion by cohort, churn, and money. Money comes in two halves that must not be added together: 'stock' is what recurs every month at today's prices, 'revenue' is what actually arrived inside the period. Each carries its own currency. Figures come from the fleet's ledger, so 'machines' says how current each machine's copy is — a machine that is behind makes the totals older than they look, it does not make them wrong. 'activation' is how many of the companies registered in the period have had their first agent come in (the first request with a configured token), and how soon — within the hour, the day, the week. 'legal' is the same cohort narrowed to the companies that came for the law — the owner signed up through a page for lawyers, or the company was made with the requirements register — as four counts: registered, a project keeps legal references, a legal document's card opened in the first week, the add-on paid for. Its 'withReferences' is null and 'unknown' names the machines while they have not reported the switch — never zero. 'ai' is AI as money over the same period — what our key's calls cost at each provider, what companies were charged, the margin, the cost nobody was charged for and why, what has accrued and what 'ai' invoices still want — and is neither in 'stock' nor in 'revenue'. Its totals are null, never zero, while a machine has not reported its AI: 'ai.missing' names it and 'ai.reported' is the sum over the machines that did. 'firstSession' is the same cohort with our own companies left out (admin_set_workspace_ours): for each step a new company is led to — board, project, issue, wiki, token, agent, invite — how many took it ('known' leaves out companies registered before the step was recorded), 'stoppedAt' the first step each did not take, and 'firstWeek' how many filed at least five issues in their first seven days, counted only once the week is over. 'segments' splits the same outside cohort by what each company came for — 'legal', 'agents', 'jira-dc' — by the landing's mark, the start chosen on the form or a fact of its own (an agent's sign-up over MCP; an import from Jira), each with registered, activated and converted; segments overlap, and 'unknown' names the machines that have not said the own fact — never zero. Default period: the last 90 days.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End of the period, as YYYY-MM-DD, included. Use with 'from'. | |
| days | No | How many days back from today. Defaults to 90, at most 730. Ignored when 'from' and 'to' are given. | |
| from | No | Start of the period, as YYYY-MM-DD. Use with 'to'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Well beyond what readOnlyHint/openWorldHint/destructiveHint declare: it explains data provenance ('the fleet's ledger'), that stale machines make totals older rather than wrong, and that null means 'not reported' rather than zero ('never zero', 'ai.missing' names it). The only shortfall is that churn and purchases are named in the opening but never explained behaviorally.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single unstructured block of roughly 450 words covering seven distinct output sections, with no bullets, headers, or paragraph breaks; the reader must parse a data dictionary to find the purpose. Most content is substantive, but the null-vs-zero rule is restated three separate times ('never zero' three times), and the length is not front-loaded beyond the first clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description must carry the entire return structure — and it does, walking through activation, legal, ai, firstSession and segments, including the segment-overlap and cohort caveats. Minor gaps remain (churn, purchases/conversion definitions), but an agent can consume the response without further documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the three parameters (from/to/days) are fully documented there, including the 90-day default and 730 cap. The description adds only 'Default period: the last 90 days', which is essentially already in the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a concrete scope statement — 'the installation as a business over a period — registrations, ... purchases and conversion by cohort, churn, and money' — plus an access constraint ('Administrators only'). That is specific enough to separate it from a generic overview, but it never names a sibling (admin_overview, admin_landing_week, site_traffic) to say which reporting tool to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Administrators only' and 'Default period: the last 90 days' give a caller constraint and a default, which is useful. But there is no statement of when to reach for this versus admin_overview or admin_landing_week, and no exclusion guidance; the when-to-use is only implied by the metric list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
admin_invoicesAdmin invoicesARead-onlyInspect
Administrators only: what companies were asked to pay and what answered it — each invoice with its amount, its coin, whether it is paid and what is short, and the payments against it. Amounts are never added across coins: each row carries its own currency and they stay apart. The list is the fleet's ledger, so 'machines' says how current each machine's copy is. One invoice's delivery record belongs to the machine that took the payment and is not rolled up — the answer says so where it is missing rather than showing an empty list.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | Only invoices of the company at this address. | |
| limit | No | How many rows, newest first. Default 50, at most 100. | |
| status | No | Only invoices in this state, e.g. 'open', 'paid', 'void'. |
TDQS
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), and the description goes further: amounts are never aggregated across coins, rows stay in their own currency, and a machine's delivery record for an invoice is not rolled up, with the response explicitly signalling absence instead of returning an empty list. These are non-obvious output caveats that an agent could not derive from the annotations or the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The access restriction and the row contents are front-loaded in the first clause, and each subsequent sentence carries distinct behavioral information rather than restating the name. Some phrasing is oblique ('what answered it', 'the fleet's ledger'), which costs a little clarity but not much length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must carry return-value meaning, and it does: per-row fields, the no-cross-currency rule, machine freshness, and the missing-delivery-record behavior. Pagination and bounds are left to the schema's limit parameter, which is acceptable. Terms like 'machines' and 'fleet's ledger' are used without definition, so an agent must infer the domain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so slug, limit, and status are already documented with defaults and bounds. The description adds nothing about filtering, ordering, or how status values combine with the company filter, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete resource (invoices) and enumerates what each row carries: amount, coin, paid status, shortfall, and payments against it. It does not differentiate itself from nearby admin_ tools (admin_workspaces, admin_bank_transfer, admin_overview), but the object read is otherwise unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only explicit constraint is 'Administrators only', which states the audience but not the call conditions. There is no guidance on when to prefer this over the other admin_ reporting tools, nor when not to use it. Usage is implied by the resource rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
admin_landing_weekAdmin landing weekARead-onlyInspect
Administrators only: the landing site's week — visits, where they came from, clicks on sign-up, and the registrations that followed. The same numbers the weekly report carries into the monitoring chat. Ask for an earlier week with weeksAgo. The rendered message is not returned, only the figures.
| Name | Required | Description | Default |
|---|---|---|---|
| weeksAgo | No | 0 is the last full week, 1 the one before it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false. The description adds useful context beyond annotations: it requires administrator privileges, clarifies that only figures (not the rendered message) are returned, and notes that the numbers match the weekly monitoring report.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three tightly written sentences: purpose and metrics first, then context about the weekly report, then parameter usage and an output caveat. No sentence is wasted, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only analytics tool with one optional parameter and no output schema, the description covers purpose, access restriction, parameter usage, and an output limitation. It could say more about the shape of the returned figures, but annotations and schema already provide most of what an agent needs to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the parameter is fully documented in the schema. The description's mention of 'Ask for an earlier week with weeksAgo' adds little beyond the schema's own description ('0 is the last full week, 1 the one before it'), so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource (the landing site's week) and lists the exact metrics returned: visits, sources, sign-up clicks, and registrations. It does not explicitly differentiate from siblings like admin_funnel or site_traffic, but the specificity is enough to distinguish it in practice.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only usage constraints given are 'Administrators only' and a note on using weeksAgo for earlier weeks. There is no guidance on when to choose this tool over alternatives such as admin_overview, admin_funnel, or site_traffic, leaving the agent to infer selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
admin_loadAdmin loadARead-onlyInspect
Administrators only: how loaded this machine is and what the language models cost. Load is this machine's own — database, streams, memory, processor, traffic and stored bytes, each as used against allowed, where an allowance is known. Model spend covers the assistant, search-by-sentence and translation over a rolling window, with totals and breakdowns by feature, by model and by day; costs are estimates from the prices recorded at the time. Who spent it is not returned here.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Window for model spend, in days. Default 30; 0 means all time. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the operation read-only, non-destructive, and closed-world, so the safety profile is covered. The description adds substantial operational context beyond that: load is machine-local, each metric is used-vs-allowed where an allowance exists, spend is estimated from recorded prices, and requester identity is excluded.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three dense sentences and front-loads the admin-only condition and core purpose. It is efficient and every sentence carries relevant scope or caveat information, though the load-component list makes it slightly heavy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only metrics tool with one optional parameter and no output schema, the description explains what is measured, how model costs are estimated, and what is deliberately excluded. That gives an agent enough context to invoke it and interpret the response at a high level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single `days` parameter is fully documented in the schema, including the default of 30 and the special value 0 for all time. The description only mentions a rolling window and does not add format or boundary details beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with an administrators-only qualifier and states the two resources it covers: this machine's load and language-model cost. It names the load dimensions and spend breakdowns, making the scope distinct from generic admin metrics, though it does not explicitly name a sibling alternative such as admin_overview or site_traffic.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It establishes a clear usage condition ('Administrators only') and the context in which the tool applies: machine-local load and model spend. It also includes an exclusion ('Who spent it is not returned here'), but does not point to a specific sibling for per-user spend, leaving that routing implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
admin_overviewAdmin overviewARead-onlyInspect
Administrators only: the whole installation by the numbers — accounts, workspaces, projects, issues, comments and sprints, plus issues broken down by status and by project. Counted across every workspace, which is what makes it the installation's rather than one company's. A total is null, never zero, when a machine of the fleet did not answer: 'fleet' says which machines were asked and which are missing, and 'here' is always what this machine counted. The breakdowns are this machine's. Read a null as 'nobody knows', never as 'none'.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the safety profile (readOnly, non-destructive, closed-world); the description adds real behavioral context the annotations cannot: totals are null rather than zero when a fleet machine is unreachable, the 'fleet' field reports which machines answered, and the breakdowns are scoped to the local machine. It even tells the agent how to interpret a null — a genuine semantic trap avoided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the audience and scope, then the fleet/null caveat, which is the most decision-relevant detail. Slightly longer than needed: the null-as-'nobody knows' point is made twice ('A total is null, never zero' and 'Read a null as nobody knows, never as none'), costing a sentence without new information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing the return shape, and it does: enumerates the counted entities, the two breakdowns, and the fleet/here companion fields. An agent knows both what it gets and how to read the missing-data cases before calling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so the baseline is 4 and there is nothing for the description to disambiguate. It spends none of its text on non-existent inputs, which is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete resource (the whole installation's counts: accounts, workspaces, projects, issues, comments, sprints) plus breakdowns, and makes the scope distinction explicit — 'the installation's rather than one company's' — which separates it from workspace-scoped siblings like admin_workspaces. An agent can identify what it returns without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Administrators only' states the prerequisite, and the installation-vs-company framing tells the agent when this aggregation is the right one. It stops short of naming a specific alternative (e.g. admin_workspaces, site_traffic) or stating when not to use it, so the routing is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
admin_set_bank_transferAdmin set bank transferADestructiveInspect
Administrators only, and this one CHANGES things: state where bank transfers are to be sent. Send the WHOLE set every time — anything left out is cleared, not kept, because details half of one bank and half of another are money sent to a mixture of two. Read admin_bank_transfer first and repeat what you are not changing. Switching the method on is refused while anything a payment needs is missing (beneficiary, account, swift, and a purpose line carrying {invoice}), and the refusal names the field; switching it off is never refused. 'minimumUsd' is a floor under the METHOD and not under the debt: a bill below it is offered the other ways to pay, and what is owed does not change. The change is recorded against the calling administrator. Bills already issued keep the details they were issued with.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | A line for the payer, e.g. which charges are whose. Shown with the details. | |
| swift | No | The bank's SWIFT/BIC. | |
| account | No | The account number or IBAN. | |
| enabled | Yes | Whether this installation takes transfers. On is refused while a required field is missing; off never is. | |
| purpose | No | What the payer must write as the purpose. Has to carry {invoice} — a transfer that does not name its bill arrives as a sum nobody can place. Defaults to 'Invoice {invoice}'. | |
| bankName | No | The bank's name and address. | |
| minimumUsd | No | The smallest bill that may be paid by transfer, in USD — correspondent fees eat a small one. Left out there is NO floor, which is the cleared state and not zero; a customer under it is offered the other ways to pay and told why. | |
| beneficiary | No | Who the money is sent to — the account holder's name as the bank has it. | |
| daysToArrive | No | How many days a wire is given to arrive, 1 to 60. The period stays open that long. Left out, the stored number is kept (7 to start with). | |
| accountCurrency | No | The account's OWN currency, e.g. 'AMD'. Bills stay in USD; this is what the receiving bank converts into. | |
| intermediaryBank | No | The intermediary bank's name, where one is needed. | |
| intermediarySwift | No | The intermediary bank's SWIFT/BIC. | |
| intermediaryAccount | No | Our account at the intermediary bank. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as non-readonly and destructive, but the description adds substantial behavioral context: omitted fields are cleared, enabling can be refused for missing required fields, the change is attributed to the calling administrator, and issued bills retain old details. However, its blanket statement that anything left out is cleared conflicts with the schema note that daysToArrive is kept when omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the critical admin-only destructive whole-set behavior and then moves through refusal rules, minimumUsd semantics, audit trail, and issued bills. It is longer and more repetitive than necessary, but the length is mostly justified by the destructive 13-parameter operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive 13-parameter mutation with no output schema, it covers the important prerequisites, refusal behavior, whole-set replacement risk, audit attribution, and effect on already-issued bills. It still lacks clarity around exceptions such as daysToArrive retention and purpose defaulting, which are important for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds some useful semantics, especially that minimumUsd is a floor on the method rather than the debt and that purpose must carry {invoice}. But the blanket 'anything left out is cleared' claim conflicts with schema details such as daysToArrive being retained when omitted, reducing the value of that added meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific admin-only mutation: setting where bank transfers are sent. It clearly distinguishes this write operation from the read sibling admin_bank_transfer by telling the agent to read that first. An agent can identify the resource and action without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit usage conditions: administrators only, read admin_bank_transfer first, and repeat unchanged values because the whole set is sent every time. It also states when enabling is refused and that disabling is never refused, which directly guides invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
admin_set_workspace_oursAdmin set workspace oursADestructiveInspect
Administrators only, and this one CHANGES things: mark a company as one of ours — our own, a test somebody here made — or take the mark off. The funnel's 'firstSession' leaves our companies out, so that 'external' means somebody who came from outside. A company that is not billed, or the demo, is ours whatever the mark says. Answers the company's row with 'ours' and 'oursBy' (marked, not-billed, demo).
| Name | Required | Description | Default |
|---|---|---|---|
| ours | Yes | True to mark it ours, false to take the mark off. | |
| slug | Yes | The company's slug, as admin_workspaces lists it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true; the description adds the auth requirement (administrators only), the downstream semantic effect on the funnel, and the override rules for unbilled/demo companies. It also describes the response shape ('ours' and 'oursBy' with values marked/not-billed/demo). It does not explicitly reconcile the destructive hint with what is effectively a reversible flag toggle, so a 4 rather than a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The critical constraints (admin-only, mutating) are front-loaded in the first clause, and every sentence carries information. There is some conversational padding ('our own, a test somebody here made') and the funnel explanation is slightly verbose, but nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only two parameters, full schema coverage, and no output schema, the description covers everything an agent needs: auth gate, mutation nature, semantic effect, edge cases (unbilled/demo), and the returned fields. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters already carry descriptions (including the true/false meaning of 'ours' and the slug's source). The description adds conceptual meaning about what the mark does but no syntax or format detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: mark a company as 'one of ours' or remove the mark, and explicitly says this CHANGES things. It is distinguishable from admin_workspaces (which merely lists companies) and from the funnel tools, since it explains the mark's effect on the funnel's 'firstSession'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear operating context: administrators only, used to classify a company as internal/test versus external for funnel purposes. It also notes the override rule that non-billed or demo companies are 'ours' regardless of the mark, which tells the agent when the flag is even meaningful. It stops short of naming an explicit alternative tool or when-not-to-use condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
admin_workspace_journalAdmin workspace journalARead-onlyInspect
Administrators only: what was done to one company and by whom — created, plan changed, period extended by hand, credited, suspended, resumed, erased — newest first, up to a hundred entries, each with the reason that was written down at the time. This is the answer to 'why is this company on a period nobody paid for'. The actor is our own operator, and is named because an entry without one answers nothing. A company living on another machine of the fleet is not here: the answer then names the machine to ask.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The company's address — 'acme' in acme.kaiku.tech. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond readOnlyHint, it discloses administrator-only access, newest-first ordering, a 100-entry cap, reason capture, actor identity, and remote-machine behavior. These are context an agent needs to interpret results and scope, not safety claims already covered by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads scope and key constraints, and every sentence is relevant to interpretation. Some narrative flourishes ('because an entry without one answers nothing') make it longer than necessary for a one-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still explains return content, ordering, entry limit, actor/reason inclusion, and the remote-machine fallback. It also sets administrator scope, so an agent has enough to call and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, slug, has a rich schema description (100% coverage), so the schema carries the parameter meaning. The description only says 'one company' without adding slug syntax or validation, making baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and scope: an administrator audit journal of actions taken on one company, including action types, actor, and reason, newest first. This distinguishes it from aggregate siblings like admin_workspaces and admin_overview by being per-company and historical.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a concrete use case ('why is this company on a period nobody paid for') and an administrator-only precondition, plus a boundary for companies hosted on another machine. It does not explicitly name an alternative tool or when to prefer it over admin_workspaces, 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.
admin_workspacesAdmin workspacesARead-onlyInspect
Administrators only: every company on the installation — its plan, what state it is in (trial, active, over-limit, suspended…), when what it paid for runs out, how many days are left, what it is using against what it may use, and its balance. Ask with endingInDays to get only the ones running out that soon, which is how 'whose trial ends this week' is answered in one call. 'attention' is the console's own short list of rows somebody has to look at. A meter reading null means the machine holding that company was not asked, not that it is idle. Owners are left out unless withOwners is true, and an e-mail address is never returned.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | Only the company at this address ('acme' in acme.kaiku.tech). | |
| status | No | Only companies in this state: 'trial', 'active', 'free', 'over-limit', 'expired', 'suspended'. | |
| withOwners | No | Include who owns each company — username and display name, never an e-mail. Off by default: this is a statistics surface, and a list of customers with names on it is a customer list. | |
| endingInDays | No | Only companies whose paid-for period ends within this many days. 0 means already run out. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint/destructiveHint already covering the safety profile, the description still adds real behavioral context: a null meter reading means the machine was not asked rather than idle, owners are excluded by default, and an e-mail address is never returned. Those are exactly the traps an agent would otherwise misreport.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the audience and scope, then filters, then caveats; every sentence carries information. It is a dense single block without list structure, which slightly slows scanning of the four distinct filter behaviors.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with no output schema, the description covers what is returned (plan, state, expiry days, usage vs quota, balance), how to narrow it, and the null/omission edge cases. An agent has enough to call it and to interpret the output correctly without further probing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds semantics beyond the schema: endingInDays is framed as the trial-expiry answer, withOwners is framed as a deliberate privacy default, and the null-meter caveat affects interpretation of results. The only flaw is the undocumented 'attention' value that appears in prose but not in the status enum.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise resource and scope: 'every company on the installation' with plan, state, expiry, usage against quota, and balance. An agent immediately knows this is a read-only tenant roster. It does not explicitly differentiate itself from nearby siblings like admin_overview, admin_load, or admin_invoices, but the enumerated payload makes the intent unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Concrete guidance is given for endingInDays — it explains that this is how 'whose trial ends this week' is answered in one call — and it mentions the 'attention' shortcut for rows needing review. No exclusions or named alternative tools are offered, and the 'attention' value is not present in the status enum described in the schema, which leaves a small gap for an agent to resolve.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
answer_issue_questionAnswer issue questionAInspect
Answer a question that was put to you on an issue, by choosing one of its options. Only the person the question was addressed to may answer it; answering again with a different option changes the answer and says so in the thread. A question whose deadline already passed can still be answered — that replaces whatever the deadline took, and the change is recorded. The answer is written into the thread as an ordinary comment and the asker is told.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Words of your own beside the option — a qualification, not the answer itself ('Postgres, but only after the migration lands'). Ignored when the asker switched free text off; check 'allowsFreeText' on the question. | |
| option | Yes | Which option to choose, counted from 0 in the order they were offered. | |
| questionId | Yes | The question's id, as returned by list_issue_questions or ask_issue_question. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses the authorization rule (addressee only), the replace-on-repeat-answer semantics, the deadline-passed override and its recording, and the side effects (answer posted as an ordinary comment, asker notified). These are exactly the mutation consequences an agent needs and that destructiveHint=false does not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the core action and eligibility, then consequences. No filler and every sentence carries distinct information (eligibility, re-answer, deadline, side effects).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter mutation with no output schema, the description covers action, authorization, idempotent-replace behavior, edge cases and visible side effects, with discovery of the question id covered by the schema. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so questionId, option and note are already fully documented, including the 0-based option index and the free-text caveat. The description adds only the notion of choosing 'one of its options' and does not extend the parameters' meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Answer a question ... on an issue, by choosing one of its options'), which is unambiguous next to ask_issue_question, list_issue_questions and withdraw_issue_question. However, it never names those siblings explicitly, so the differentiation is inferred from wording rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete eligibility ('Only the person the question was addressed to may answer it') plus edge-case guidance for re-answering and for questions whose deadline passed. It stops short of routing the agent to alternatives (e.g. use list_issue_questions to discover ids, withdraw_issue_question to cancel), so it is clear context rather than a full when/when-not map.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
answer_review_remarkAnswer review remarkAInspect
Answer a remark of a page's review (see get_wiki_page_reviews). As the page's author — whoever may edit it — 'fixed': true says it is put right in the version the page is at now, false that it still stands (it is then compared with this version, so the next edit asks again); 'note' says how. As its reviewer — or the project's lead — 'action': 'reopen' puts a remark said fixed back as standing, 'withdraw' takes it back. The reviewer is told of an author's answer.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | What was done, or why it stands. | |
| fixed | No | The author's answer: true fixed, false still stands. | |
| action | No | The reviewer's instead: 'reopen' or 'withdraw'. | |
| remarkId | Yes | The remark's id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses important behavior: an author's answer is reported to the reviewer, 'fixed: false' leaves the remark standing and causes the next edit to ask again, and 'reopen'/'withdraw' are reviewer-only actions. These details clarify permissions and state transitions that the annotations alone do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it states the purpose first, then explains author versus reviewer semantics in a dense but purposeful way. Every clause adds operational meaning, with no redundant restatement of the title or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description covers the necessary context: who may call it, what each response mode does, and how the reviewer is notified. No critical behavioral information appears to be missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already defines the parameters, but the description adds meaningful semantics for the role-specific use of 'fixed', 'action', and 'note'. It clarifies that 'fixed: false' is compared against the current version and that reopening/withdrawing are reviewer actions, though it does not further elaborate on 'remarkId'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Answer a remark of a page's review.' It also points to the sibling tool get_wiki_page_reviews, making the distinction between finding remarks and responding to them clear without requiring schema comparison.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly explains role-based usage: page authors use 'fixed' to indicate whether a remark was resolved, while reviewers or project leads use 'action' to reopen or withdraw a remark. This gives clear conditions for selecting each parameter path and names the related sibling tool for retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
approve_wiki_pageApprove wiki pageAInspect
Approve a wiki page IN YOUR OWN NAME, in the edition you read: 'version' is the page's version as get_wiki_page gave it, and the call is refused if the page has been edited since — read it again first. The approval is a line in the page's journal: who, when, which edition, and an optional note. It is never edited or deleted (withdraw_wiki_page_approval adds a line that takes it back). A later edit of the page does not remove it — the page then says that the edition in force is the approved one and the newer text is not approved. Only the project's lead (or the company's owner or an admin), or somebody named on the page with ask_wiki_page_approval. Approving is a person's statement: do it when your person told you to, not because a page looks finished.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Page id. | |
| note | No | An optional note kept with the approval, e.g. the decision it rests on. | |
| version | Yes | The version you read and are approving. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare it is not read-only, not destructive, not open-world; the description adds far more: the version acts as an optimistic lock and the call is refused on a stale read, the approval is an append-only journal line that is never edited or deleted, later page edits do not erase it but re-mark the approved edition, and the exact authorization set (project lead, company owner, admin, or person named via ask_wiki_page_approval).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the verb and identity constraint, and every sentence contributes (concurrency, immutability, authorization, intent). Slightly long and the closing maxim is rhetorically weightier than necessary, but nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description covers what the side effect is, who may perform it, what invalidates the call, and how to undo it — everything an agent needs to invoke it correctly and safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage the baseline is 3, but the description adds real meaning the schema does not: 'version' is specifically the value get_wiki_page returned and functions as a concurrency guard that causes refusal, and 'note' is framed as the recorded rationale that persists with the journal line.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Approve a wiki page') and immediately pins the scope: 'IN YOUR OWN NAME, in the edition you read'. It is also clearly distinguishable from the sibling approve-adjacent tools (withdraw_wiki_page_approval, ask_wiki_page_approval) which it names.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('do it when your person told you to, not because a page looks finished') and a when-not/exclusion, plus the prerequisite 'read it again first' if the page changed. It also names withdraw_wiki_page_approval as the reversal path and ask_wiki_page_approval as the route to being named on the page.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ask_issue_questionAsk issue questionAInspect
Ask one person a question with pre-written answer options, in an issue's thread — the way to get a decision that does not get lost in the comment stream. The question appears as an ordinary comment (so every Jira-speaking reader sees it) and is tracked separately: the person you ask sees it counted in their Questions list until they answer. It does not wait for ever — give 'defaultOption' and the deadline takes it if nobody answers, so a blocked run can go on. Requires permission to comment in that project. NOTE: this is not the bgs 'ask_question' tool, which is the background-agent ledger — this one is a question to a person on a PM issue.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Who to ask: the username, which list_users hands you ready-made — never the display name. They must be able to see this project, and it cannot be you. | |
| key | Yes | Issue key, e.g. 'UK-1'. | |
| options | Yes | The answer options, in the order to offer them: at least 2, at most 8, each a short label rather than a paragraph. Fewer than two is not a question with options — that is a comment. | |
| question | Yes | The question itself. Keep it to what the options answer. | |
| ttlHours | No | How long to wait, in hours. Omitted is 48 (two days). 0 means no deadline at all — the question waits until somebody answers it, which is rarely what an agent wants. | |
| allowFreeText | No | Whether the answerer may add words of their own beside the option they choose. Defaults to true. Set false when the answer has to be machine-comparable and nothing else. | |
| defaultOption | No | Which option to take if nobody answers before the deadline, counted from 0. Give one whenever there is a safe assumption — it is what lets you carry on rather than stall. Omit it when no option is safe to assume: then the deadline only stops the waiting and decides nothing. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark this as a non-destructive write with no open-world access, so safety is largely covered. The description adds real behavioral context beyond that: it appears as an ordinary comment, is tracked in a Questions list until answered, requires comment permission, and what the deadline does with and without defaultOption. It doesn't say what happens on withdrawal or how the asker is notified, but the added 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first clause, then behavior, then permissions and the sibling caveat. It is dense but each sentence carries information; the closing NOTE is slightly long but earns its place by preventing confusion with the background-agent ledger tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write tool with no output schema, the description covers what is created, who sees it, tracking, permission requirements, and deadline semantics — enough to invoke correctly. Minor gaps (notification behavior, withdrawal outcome) remain but are not essential to a correct call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all seven parameters are already documented and the baseline is 3. The description adds motivation rather than restating syntax — explaining that defaultOption plus the deadline lets a blocked run resume, and that the deadline only stops waiting when no default exists — which clarifies the intent of the most consequential parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource (ask one person a question with pre-written answer options in an issue thread) and immediately distinguishes it from a plain comment ('tracked separately', counted in the Questions list). An agent can tell exactly what it creates and how it differs from the comment-stream siblings without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for use ('the way to get a decision that does not get lost in the comment stream') and steers the ttlHours/defaultOption choice (defaultOption lets a blocked run continue; ttlHours 0 rarely what an agent wants). It distinguishes from the bgs 'ask_question' tool but does not explicitly name the closer siblings answer_issue_question / withdraw_issue_question, so routing guidance is clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ask_wiki_page_approvalAsk wiki page approvalAInspect
Name the people who may approve a wiki page, and tell each of them: they get a notification that opens the page. 'who' is usernames or e-mails as 'a,b' — each must be able to read the page. Somebody already named is asked again, about the edition the page is at now. With release: true the people in 'who' are taken OFF the list instead; what they already approved stays approved. The project's lead, the company's owner or an admin only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Page id. | |
| who | Yes | Usernames or e-mails, as 'a,b'. Take them from list_users. | |
| note | No | A line for the people asked — what changed, by when. | |
| release | No | true to take these people off the page's list instead of asking them. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses the notification side effect ('they get a notification that opens the page'), the re-ask behavior ('about the edition the page is at now'), and the non-revoking semantics of release. It adds no detail on permission failures or what happens when an entry cannot read the page.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first clause and every sentence carries non-redundant information. Some sentences, such as 'Somebody already named is asked again, about the edition the page is at now', are densely phrased enough to slow comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter write tool with no output schema, the description covers permissions, side effects and both modes. It stops short of describing failure behavior and whether re-asking clears earlier approvals, which an agent might need before invoking it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema documents all four parameters fully (100% coverage), and the description still adds constraints the schema does not: the 'a,b' format, the list_users source, the read-access prerequisite, and the precise meaning of release. The only gap is the lack of detail on the 'note' parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a concrete verb and resource: it names the approvers of a wiki page and notifies them. It does not explicitly contrast itself with the sibling tools approve_wiki_page, withdraw_wiki_page_approval or set_wiki_page_readers, so an agent must infer the boundary from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear operating conditions: 'who' must be able to read the page, entries come from list_users, and 'release: true' switches the tool into removal mode. What is missing is routing to withdraw_wiki_page_approval, which overlaps with the release path, so the agent gets no explicit 'use X instead' rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_checklist_itemCheck checklist itemADestructiveInspect
Tick or untick one checklist item by the 'id' get_checklist gave it. Written as a click on the item is: the same history line and the same notices to the issue's watchers, in your name — and only the item's box changes, so an edit somebody is saving to the description at the same moment is never lost. Ticking a ticked item changes nothing ('changed' false). An id that finds nothing means the item was rewritten or removed: read the checklist again. Requires permission to edit the issue.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The item's id, from get_checklist. | |
| key | Yes | Issue key, e.g. 'UK-1'. | |
| checked | No | true to tick the item, false to untick it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing real side effects: a history line, watcher notices issued in the caller's name, and that concurrent description edits are not lost. It also documents idempotency ('Ticking a ticked item changes nothing') and the failure semantics for unknown ids, which annotations like destructiveHint cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the action and the id source in the first clause, then layers side effects, idempotency, and error handling in a tight sequence. Dense but each sentence carries distinct operational information; only the em-dash aside on concurrent edits is slightly ornate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers action, identifier source, permissions, side effects, idempotency, stale-id recovery, and the 'changed' false return value, which substitutes for the absent output schema. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema does not: the id's provenance and lifecycle (rewritten or removed items make ids stale) and the no-op behavior when 'checked' matches current state.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair (tick/untick), the exact resource (one checklist item), and the identifier source ('id' from get_checklist). An agent can distinguish this from get_checklist and from issue-editing tools without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear preconditions ('Requires permission to edit the issue') and a recovery path when the id is stale ('read the checklist again'). It does not name an explicit alternative tool or a when-not-to-use case, but the operation is narrow enough that few exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_sourceCheck sourceADestructiveInspect
Check a source of a project's register against the open services now: its arXiv id against arXiv, its DOI against Crossref, its zbMATH number against zbMATH Open — whether the work is there and whether its authors (by surname), title and year are the record's. Every service agreeing makes it 'api' (checked by a service) and takes the † off; a service disagreeing or not having the work makes it 'mismatch' with the reason field by field, with the †; a service that does not answer changes nothing and is said in 'silent'. A source a person checked against the original, or a mismatch a person set, keeps their word: what the services say otherwise comes back as 'serviceNote', without the †. 'newerVersion' says arXiv has a later version than the one checked. MR and ISBN are asked nowhere. Sources are also checked by themselves when an identifier is written and weekly, so call this only when the person wants it now; at most 30 a project an hour, answers kept a day per identifier. Members of the project who may write only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | The source's id, as list_sources returned it. | |
| source | No | Its key or an identifier it has, with 'project'. | |
| project | No | The project key, with 'source'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is rich about behavior (status transitions to 'api'/'mismatch'/'silent', preservation of human-verified/mismatch word as 'serviceNote', 'newerVersion', rate limits, cache). However it clearly describes live calls against open services (arXiv, Crossref, zbMATH), which contradicts the openWorldHint=false annotation. The destructiveHint=true annotation is loosely consistent with its field mutations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded, but the text is a dense run-on of special symbols and rules ('†', 'silent', 'newerVersion') that is longer and harder to parse than it needs to be. Every clause is relevant, but structure could be tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a state-mutating tool with no output schema, the description explains outcomes thoroughly (api/mismatch/silent/serviceNote/newerVersion) and permission/rate behavior. The only gap is a precise account of what the response actually contains, but the outcome semantics are covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (id, source, project) are already documented, and the description adds no syntax or format details beyond that. Baseline 3 applies when the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It states a precise verb+resource (registers a source against arXiv/Crossref/zbMATH and reports agreement) and distinguishes this verification action from siblings like get_source (read), set_source (edit), and list_sources (list). An agent can identify exactly what the call does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent to call only 'when the person wants it now' since sources are checked automatically on write and weekly, and states rate limits (30/project/hour, cached a day) and the write-permission prerequisite. This is clear when-to-use guidance plus constraints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
citeCiteARead-onlyInspect
How to cite a work of a project's register in a text you write: give its key or any identifier in any shape ('arXiv:2301.01234', a DOI or its address, 'MR1234567', 'Zbl 1234.56789', an ISBN) and get 'cite' — '[@KEY]', what to put in a page, a comment or a description — the 'reference' line a bibliography prints (with † while it is unchecked or disagrees with what it names), and its BibTeX entry for a paper. Use it rather than typing a reference out by hand, so every text names one row. When the register does not have it, 'found' is false and, where what you gave is an identifier, 'offer' says which: add the source with set_source (that identifier, a key and its title) before citing it. Anybody who sees the project.
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | The source's key ('IMP26') or an identifier of the work, in any shape. | |
| project | Yes | The project key, e.g. MATH. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, but the description adds substantive behavior: the † marker appears while a reference is unchecked or disagrees with what it names, and 'found'/'offer' describe the miss path. The only gap is it doesn't clarify output shape/format of the returned BibTeX or reference beyond naming them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and the output contract, and every clause carries information about return values or the miss path. It is dense and runs long with nested quotes and em-dashes, which slightly slows parsing, but nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter read-only tool with no output schema, the description fully covers what comes back (cite token, page/comment reference line, bibliography line with † flag, BibTeX), the not-found case, and the follow-up action. Nothing an agent needs in order to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, and the description earns extra credit by giving concrete identifier shapes ('arXiv:2301.01234', DOI, 'MR1234567', 'Zbl 1234.56789', ISBN) that the terse schema wording ('in any shape') does not illustrate. It falls short of 5 only because the project parameter gets no elaboration.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('cite') and resource (a work in a project's register), and enumerates exactly what it returns: the 'cite' token, the reference line, and the BibTeX entry. It is easily distinguished from siblings like get_source or list_sources because it is about producing citation strings, not fetching records.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use it 'rather than typing a reference out by hand,' and names the alternative path: when 'found' is false and an identifier was given, call set_source with that identifier, a key and a title before citing. Both the when and the when-not are covered with the sibling to use instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
code_callsCode callsARead-onlyInspect
Who calls a class, method or function, or what it calls, to a depth of up to 3 — each use with its file and line. Uses linked only by the bare name are counted, not listed, because they are often a different symbol of the same name. When several symbols share the name, the answer lists them to choose from.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | The path of the symbol's file, or part of it, when its name is not enough. | |
| repo | No | Which repository, as 'group/repo'. Omit to ask every repository open here. | |
| depth | No | How many rings out: 1 (default) to 3. | |
| symbol | Yes | The symbol, e.g. 'IssueTransition.MoveAsync'. A bare name works when only one symbol has it. | |
| direction | No | 'callers' (who uses it, the default) or 'callees' (what it uses). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/destructive=false and openWorld=false, and the description adds real context beyond them: the depth ceiling of 3, that bare-name-only links are counted but not listed, and that name collisions produce a disambiguation list instead of a graph. What's missing is any note on result volume or how large the caller/callee list can get at depth 3.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core capability, then the caveats about bare names and name collisions. Dense but each sentence carries information; the only slight redundancy is re-stating the depth limit already covered in the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does the work of describing returns: each call site with its file and line, counts for bare-name-only links, and a disambiguation list for name collisions. For a 5-parameter, local-only read tool with annotations covering safety, nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage the baseline would be 3, but the description adds interpretation the schema does not: 'depth' is framed as 'rings out' from the symbol, 'direction' as callers (default) vs callees, and the bar-name/ambiguity rule explains when 'path' is actually needed. That is meaningful semantics beyond the already-documented fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: traversing the call graph ('who calls' / 'what it calls') for a class, method or function. It is clearly distinguishable from siblings like code_symbols, search_code and read_code, and names its scope (depth up to 3, file and line per use).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives solid context on when the result is usable ('a bare name works when only one symbol has it', and ambiguous names cause a list to choose from), which implicitly tells the agent when to retry with path or a qualified name. It stops short of explicitly routing between this tool and search_code or code_symbols, so no named alternative appears.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
code_symbolsCode symbolsARead-onlyInspect
Where a class, method or function is declared in the code of the repositories connected to a project: its file, line and signature. Ask by name, or Class.Method to say whose. Only repositories whose owners opened them to agents are asked.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The symbol's name, e.g. 'MoveAsync', or 'IssueTransition.MoveAsync' to say whose. | |
| path | No | Keep only declarations in files whose path contains this. | |
| repo | No | Which repository, as 'group/repo'. Omit to ask every repository open here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint=false, so the safety profile is covered. The description adds genuine context beyond that: the visibility constraint that only repositories whose owners opened them to agents are queried, and the shape of the returned data (file, line, signature). Pagination and result-limit behavior remain unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no padding, and the core purpose is front-loaded before the access caveat. The final clause about repository owners is slightly convoluted in phrasing but earns its place as scope information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only three parameters, full schema coverage, annotations covering safety, and no output schema, the description supplies the missing pieces an agent needs: what is returned and which repositories are searched. Ambiguity handling (multiple matches, default repo scope) is the only notable omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all three parameters including the 'Class.Method' whose-form and the path/repo filters. The description's 'Ask by name, or Class.Method to say whose' largely restates the schema. Baseline 3 applies when the schema carries the parameter load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource and verb: locating where a class, method or function is *declared*, and returns file/line/signature. That is meaningfully narrower than search_code or read_code. It stops short of naming a sibling to differentiate against, leaving the agent to infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Ask by name, or Class.Method to say whose' explains how to call it, not when. There is no explicit contrast with search_code, code_calls, list_code or read_code, so an agent must infer that this is the declaration-lookup tool rather than a text search or call-graph tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connect_repositoryConnect repositoryAInspect
Connect one more GitHub or GitLab repository to a project, by its address — 'https://github.com/owner/repo', a gitlab.com project or a company's own GitLab. No token is taken here, ever: the host is asked as anybody would ask it, so a public repository connects at once and a private one is refused, with the screen to connect it on with a token. With openSource: true it is also marked as the project's open source repository — asked without a token whether anybody can read it and under which licence — which is what set_project_public needs; marking opens nothing by itself. A repository already connected is marked rather than connected twice. Only the project's lead, a board administrator or a company admin may; the mark is written to the company's journal.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The repository's address, e.g. 'https://github.com/owner/repo'. github.com is GitHub; any other host is taken for a GitLab. | |
| openSource | No | true to mark it as this project's open source repository. Leave it out for a repository connected only for the links between issues and code. | |
| projectKey | Yes | Key of the project, e.g. 'LIB'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations only declaring readOnly=false/destructive=false/openWorld=true, the description supplies the real behavioral burden: no token is ever accepted here, non-public repos fail with a prompt to connect via token, already-connected repositories are marked rather than duplicated (idempotency), and the operation is journaled. It also names the authorization roles (project lead, board admin, company admin).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action is front-loaded in the first clause and every subsequent clause carries distinct information (token policy, idempotency, permissions, journaling). It is dense and heavy on em-dashes, but nothing reads as filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, it covers authorization, failure mode (private repo refusal), idempotency, side effects (journal entry), and the meaning of the optional flag. An agent has enough to call it correctly and predict the outcome.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond it: 'marking opens nothing by itself' clarifies openSource is a bookkeeping flag, and it ties openSource to the downstream set_project_public requirement. This is genuine value added over the schema's own wording.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with scope ('Connect one more GitHub or GitLab repository to a project, by its address') and clarifies that only one repository is added at a time. An agent can immediately tell this is an additive connect operation rather than the toggle (set_repository_open_source) or listing (list_repositories).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context: public repositories connect at once, private ones are refused and routed to a token screen, and openSource should be set only when the repo is the project's open source repository (which set_project_public depends on). It stops short of explicitly naming set_repository_open_source as the alternative for changing the flag later, so it is strong but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_chatCreate chatAInspect
Open a chat. kind 'direct': the chat with one colleague ('with') — there is one per pair, so an existing one is found rather than made ('created' false). kind 'group': a group with a title and its members, you its administrator. kind 'agent': a chat of your own with one of the company's agents ('agent', e.g. 'product'), found if you have one. Only the company's own people. A project's chat is never made — it is there for every project; list_chats with projectKey finds it.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | 'direct', 'group' or 'agent'. | |
| with | No | For 'direct': the colleague's username or email. | |
| agent | No | For 'agent': the agent's role key or handle, e.g. 'product' or 'agent:product'. | |
| title | No | For 'group': its title. | |
| members | No | For 'group': the members besides you, by username or email. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses key non-obvious behavior: direct chats are unique per pair and found rather than made ('created' false), agent chats are found if one exists, and project chats are never created. It also states the caller becomes administrator for group chats and that only company people are valid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it states the action, then handles each kind in turn, then closes with the project-chat exception. Every clause carries operational meaning without repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still discloses the important return behavior ('created' false when an existing chat is found) and covers all valid kind-specific paths plus the project-chat exclusion. An agent has enough context to choose this tool and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents each parameter. The description still adds useful semantics by tying parameters to kinds and clarifying that group 'members' are besides the caller, who becomes administrator, and that direct chats are one per pair.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Open a chat') and then differentiates all three supported kinds. It distinguishes creation from lookup behavior for direct and agent chats and from project chats, which are never created here.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit conditions for each kind: 'direct' with one colleague, 'group' with title/members, 'agent' with an agent handle. It also routes the project-chat case away from this tool by naming list_chats with projectKey as the way to find it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_claim_embedCreate claim embedAInspect
Put one claim of a project on other sites (PM-1165, PM-1166): a link anybody can open with no account, which shows its kind, number, title, statement with its formulas and status — never its bases, journal or review — and, while the project is public, the page it rests on. Answers with the ready code: 'script' once per page and 'mark' around the words on the site, which open the claim in a cloud, or 'iframe', a card. Name it by 'id', or by 'project' and 'label'. 'sites' and 'days' as for create_term_embed. Only for somebody who may write in the project; a line in its history.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | The claim's id, as list_claims returned it. Or name it by 'project' and 'label'. | |
| days | No | Days the link answers, 1 to 3650. Optional: none is until it is removed. | |
| label | No | The claim's label, e.g. 'thm:d5-rank5', with 'project'. | |
| sites | No | Sites that may show it, comma-separated, as https://example.org. Optional: none is any site. | |
| project | No | The project key, with 'label'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false and destructiveHint=false; the description adds substantially more: exactly which fields become publicly visible (kind, number, title, statement, formulas, status) and which never do (bases, journal, review), that the underlying page is exposed only while the project is public, that write permission is required, and that a history line is recorded. This is exactly the disclosure needed for a tool that publishes unauthenticated content.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and the exposure constraints are front-loaded and nearly every clause carries information (visibility rules, output forms, identification, permissions, audit). The single run-on paragraph and archaic diction ('a link anybody can open', 'which open the claim in a cloud') make it denser to parse than it needs to be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still explains the return values (script once per page, mark around words, iframe card), covers permissions and side effects, and leaves parameter rules to a fully documented schema. Remaining minor gaps: no statement about precedence when both id and project/label are supplied, and no hint about revoking an embed (delete_registry_embed/delete paths) after creation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents id/days/label/sites/project including the 'or name it by project and label' rule. The description restates that identification rule and only adds a cross-reference ('as for create_term_embed'), which is a pointer rather than new semantics, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource: it puts one claim of a project on other sites as an embeddable link, and names the three output forms (script, mark, iframe). It is distinguishable from create_term_embed/create_wiki_embed/create_embed_set by the 'claim' subject, though the ornate phrasing ('Put one claim ... on other sites') slows recognition of the exact operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a permission precondition ('Only for somebody who may write in the project') and defers parameter behavior to a sibling ('sites' and 'days' as for create_term_embed). It never states when to use this over create_embed_set or the other create_*_embed siblings, so the routing decision is only implied by the resource name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_credentialCreate credentialAInspect
Attach a secret — a password, a key, a test login — to an issue or a wiki page, instead of writing it in a comment or a description, where everyone on the project reads it for ever. Pass issueKey or pageId, and a 'name' saying what it is. It can be read by the person whose token this is, by the people in 'readers', and by the project's lead, who reads every secret in the project — and by nobody else, however much of the issue they can see. The answer lists them in 'readableBy': say that to the person rather than 'only you'. There are two ways to give the value. WITHOUT 'value' nothing is stored and the answer is a 'form' link: it opens the attach dialog with the name and the readers filled in, and the person types the value there themselves. Prefer that whenever the value is not already in the conversation — a value that passes through you stays in your context and in your client's logs. WITH 'value' the secret is stored now and the answer carries its id and name, never the value; it is recorded against the token you are using. Do not repeat the value in any text you write — a comment, a description, a merge request, a log. A name in 'readers' that is unknown or cannot open the project is not stored and comes back in 'dropped' with the reason. Needs the right to edit the issue or the page.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | What it is, e.g. 'stand admin password'. Read by everybody who may read the secret, so not the value and no part of it. | |
| value | No | The secret itself. Leave it out to get a 'form' link where the person types it themselves. | |
| pageId | No | Wiki page id. | |
| readers | No | Who else may read it, comma-separated usernames or emails (see list_users): 'ivan,olga'. Leave it out for nobody else. | |
| issueKey | No | Issue key, e.g. 'UK-1'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say non-read-only, non-destructive, closed-world; the description goes far beyond with the access model (token holder, 'readers', the project lead who reads every secret, nobody else), the two write modes and their consequences, that the stored value is never returned, that it is attributed to the current token, and the failure path for unknown readers in 'dropped'. This is exactly the context an agent needs before calling a credential-writing tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The most important fact (what the tool is for and why not to use a comment) is front-loaded in sentence one, and the security instruction about not echoing the value is repeated at the end where it matters. It is long, and a couple of clauses are more exhortative than informative ('a value that passes through you stays in your context and in your client's logs'), but almost every sentence carries decision-relevant content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description covers exactly what would be missing: the shape of the response in both modes ('form' link versus id and name, never the value), the 'readableBy' field and how to report it to the user, and 'dropped' with its reason. Permissions and partial-failure behaviour are also stated, so nothing needed to call or interpret this tool is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning on top: it says to pass issueKey or pageId (the schema marks neither as required, so this clarifies the actual requirement), what happens when 'value' is omitted versus supplied, and that 'readers' entries may be silently dropped with a reason. That is genuine interaction semantics beyond the per-field schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a concrete verb+resource: attach a secret (password, key, test login) to an issue or a wiki page. It explicitly distinguishes itself from the obvious alternative behaviour (writing the value in a comment or description), so the agent understands it is a dedicated secret store rather than a generic write.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit routing rule away from siblings ('instead of writing it in a comment or a description'), plus a strong preference rule for the omitted-'value' form flow 'whenever the value is not already in the conversation', and a prerequisite ('Needs the right to edit the issue or the page'). Both when-to-use and when-to-prefer-the-alternative-path are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_embed_setCreate embed setAInspect
Put a list of a project's terms and claims on other sites under ONE link (PM-1167) — for an article that cites many: the site puts 'script' in once and marks its words by name, or data-kaiku-claim="thm:d5-rank5", each opening its cloud. Only what the list names goes out, each thing as its own link would show it; a name not on it says so and nothing of the project. The list is given by hand: 'terms' — ids, words or spellings — and 'claims' — ids or labels — comma-separated, each one you may put out alone (a confirmed term you may open); the first that is not is the refusal and nothing is made. At most 200 things a set and 20 sets a project. A set has no card. 'sites' and 'days' as for create_term_embed. Only for somebody who may write in the project; a line in its history.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Days the link answers, 1 to 3650. Optional: none is until it is removed. | |
| sites | No | Sites that may show it, comma-separated, as https://example.org. Optional: none is any site. | |
| terms | No | Terms, comma-separated: ids, words or spellings. | |
| title | No | The set's name, e.g. the article's; up to 120 characters. Optional. | |
| claims | No | Claims, comma-separated: ids or labels. | |
| project | Yes | The project key, e.g. MATH. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, destructiveHint=false), the description discloses real behavior: hard quotas (200 things per set, 20 sets per project), atomic all-or-nothing creation ('the first that is not is the refusal and nothing is made'), disclosure scoping ('Only what the list names goes out', an unknown name leaks nothing of the project), the absence of a preview card, and an audit entry in project history. The phrasing is oblique in places, but the operational facts an agent needs are present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, but the body is a dense run-on of em-dashes, parentheticals and elliptical clauses ('a name not on it says so and nothing of the project') that require re-reading. The PM-1167 ticket reference and meta-commentary like 'A set has no card' spend words without adding decision value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter, non-readonly write tool with no output schema, the description covers authorization, quotas, failure atomicity and disclosure scope, which is the bulk of what matters. The one gap is that it never states what the call returns (presumably the set's link/identifier), which an agent would need given there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so 3 is the floor; the description exceeds it by explaining that 'terms' accepts ids, words or spellings and 'claims' accepts ids or labels, comma-separated, and by cross-referencing create_term_embed for the semantics of 'sites' and 'days'. The added rule that each listed item must be individually publishable ('a confirmed term you may open') is meaningful validation context not present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening clause gives a concrete verb and resource: putting a list of a project's terms and claims on other sites under ONE link, with the HTML snippets (data-kaiku-term / data-kaiku-claim) showing what is produced. It implicitly contrasts with the singular create_term_embed / create_claim_embed siblings via 'each thing as its own link would show it', but never names them as the alternative, so differentiation is left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'for an article that cites many' gives a use-case signal, and 'Only for somebody who may write in the project' sets a permission precondition. However, it never explicitly routes an agent to create_term_embed or create_claim_embed when only one thing needs publishing, and the ticket reference PM-1167 is not actionable guidance — usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_issueCreate issueAInspect
Create an issue in a project visible to this token. Returns the new issue key. Requires permission to create issues in that project. Answers with 'notified' (who this actually reaches: the people mentioned, and for an assignment the new assignee as 'assignee' and the one taken off as 'unassigned' in 'as' — never yourself) and 'unresolvedMentions' (what looked like a mention and reached nobody, each with a reason) — a wrong handle is stored as written and never refused, so that list is the only sign it did not land.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Issue type name, e.g. 'Task', 'Bug', 'Story', 'Epic'. Defaults to 'Task'. | |
| order | No | Its place among its parent's children: 1, 2, 3… — the order they are to be done in. Children with a place come first, in it; the rest after, by number. Filing a template's sub-tasks, pass 1, 2, 3… in turn. | |
| labels | No | Labels to set, space or comma separated. | |
| dueDate | No | The day this is due, as YYYY-MM-DD. A calendar day, not a timestamp — do not send a time or a zone. | |
| summary | Yes | Issue summary (title). | |
| assignee | No | Assignee username or email. Omit to leave unassigned. | |
| priority | No | Priority name, e.g. 'High'. | |
| teamRole | No | The project's team role this issue is for, by name, e.g. 'Звуковик' — one of the roles its administrators keep. With no assignee given, the issue goes to the person who has held that role longest. | |
| parentKey | No | Parent issue key, to create this as a child/sub-task. | |
| projectKey | Yes | Project key, e.g. 'UK'. | |
| description | No | Issue description. Markdown is kept as written, and carries $…$ / $$…$$ LaTeX formulas and [~username] mentions (the username, which list_users hands you ready-made — never the display name). | |
| fixVersions | No | The versions of the project this goes out in, by name, comma-separated: '2.4.0' or '2.4.0, 2.4.1' — the names list_versions gives. A name the project does not have refuses the filing and lists the ones it has. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses important behavioral traits: the permission requirement, the returned issue key, the meaning of 'notified' and 'unresolvedMentions', and the fact that malformed mention handles are silently stored rather than refused. That last detail is especially valuable because it warns the agent that unresolvedMentions is the only signal a mention did not land.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and return value, then moves into permission and notification details. The 'notified' explanation is dense and somewhat convoluted, but it carries genuinely important behavioral information rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter creation tool with no output schema, the description does well: it explains the return key, notification side effects, and permission requirements while the schema handles parameter details. It does not cover failure modes such as invalid project keys or issue type mismatches, which would strengthen completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 12 parameters thoroughly. The description adds useful cross-cutting context about mentions and notification behavior, but it does not add per-parameter semantics beyond what the schema provides. The baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: create an issue in a project visible to this token. It also states the immediate return (the new issue key), so the agent knows exactly what action is being taken and what to expect, even without naming siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when this tool applies: creating an issue in a project visible to the token, with the permission requirement called out. It does not explicitly name alternatives such as update_issue or find_issues, but the create action is sufficiently distinct that the guidance is practically clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_issue_from_chat_messageCreate issue from chat messageAInspect
Make an issue of a message in one of the company's chats — or of a thread of them — in one step, as the screen's «Make an issue» does (PM-1237). The description quotes the messages (who wrote each and when) unless you give your own, and always ends with a link back to the message, which opens only for the chat's people; the messages' files are copied onto the issue; the message shows «→ KEY» to whoever may open the issue. Filed as create_issue files — your rights in that project, its rules, its watchers. A project's chat files into its project when projectKey is omitted; any other chat needs projectKey. Answers like create_issue, with 'files' copied.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Issue type name. Defaults to 'Task'. | |
| chatId | Yes | The chat's id, as the chat's address /chats/{id} has it. | |
| labels | No | Labels, space or comma separated. | |
| dueDate | No | Due day, YYYY-MM-DD. | |
| summary | No | Issue summary (title). Defaults to the message's first line. | |
| assignee | No | Assignee username or email. | |
| priority | No | Priority name. | |
| copyFiles | No | Copy the messages' files onto the issue. Default true. | |
| messageId | Yes | The message's id — the one the issue is made of; its author may be the reporter. | |
| parentKey | No | Parent issue key. | |
| projectKey | No | Project key. Defaults to the project of a project's chat; required for any other chat. | |
| description | No | Issue description, Markdown. Defaults to the messages quoted; the link back to the chat is added after it either way. | |
| alsoMessageIds | No | Other messages of the same chat to quote with it, by id — a thread. At most 50 in all. | |
| reporterIsAuthor | No | Make the message's author the reporter instead of you — refused when they cannot open the project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Well beyond the annotations (which only say readOnly=false, destructive=false, openWorld=false): it discloses that the description auto-quotes authors and timestamps, that a permission-scoped backlink is always appended, that files are copied, that a «→ KEY» marker appears on the message, that filing obeys the target project's rights/rules/watchers, and that the response mirrors create_issue.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded and there is no filler, but the prose is dense and clipped, with constructions like 'Filed as create_issue files — your rights in that project, its rules, its watchers' that cost readability for the 14-parameter decision the agent has to make.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers what would otherwise be unknowns for a 14-parameter mutation with no output schema: side effects (file copying, message marker, backlink), permission implications, filing rules, and the response shape ('Answers like create_issue, with files copied').
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so projectKey defaulting, description/summary defaults, copyFiles, and the 50-message thread cap are already documented in the schema. The description mostly restates those behaviors rather than adding new parameter meaning, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Make an issue of a message in one of the company's chats — or of a thread of them') plus the one-step scope, and names create_issue as the analogous flow so the agent can place it against the general issue-creation sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete routing rule for the main decision: 'A project's chat files into its project when projectKey is omitted; any other chat needs projectKey.' It does not explicitly compare against create_issue (e.g. 'use create_issue when not starting from a chat message'), so it's clear context without full exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_projectCreate projectAInspect
Administrators only: create a project — a new key, a starter board, and its own wiki space, led by you unless you name someone else. The key is yours to choose and is never invented for you: one already taken is refused, naming the project holding it, rather than quietly becoming KEY2 — the key shows in every issue key, link and commit, and renaming it later costs more than creating the project did. Calling it again with the same key and name returns that same project with created:false, so a retry after a lost answer cannot make a second project. Deleting one is not offered here: that is a decision a person makes looking at what is inside. Who may: an administrator of this workspace, or — for a subproject — the lead of the parent, since it hands over their own project's people.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Project key, 2–10 characters: a letter followed by letters or digits, e.g. 'BGS'. Uppercased. | |
| lead | No | Username or email of the project lead. Defaults to you — a project with no lead is one nobody can configure: export, colour, the bgs connection and access grants all need a lead or an admin. | |
| name | Yes | Project name, e.g. 'Background agents'. | |
| parentKey | No | Key of the project this one is a subproject of. Everybody who may reach the parent may reach this project too, in the role they hold there — so add only the people the parent does not already have. Leave it out for a project of its own. One level: a subproject cannot have subprojects. The key here is still an ordinary key ('KYCB2B', not 'KYC-B2B'), because it is what every issue key is built from. | |
| description | No | What the project is for. Markdown. | |
| openSourceRepo | No | Optional: the address of the public repository this is the open source project of, e.g. 'https://github.com/owner/repo' or a GitLab project's address. The host is asked without a token whether it is public; a private or missing one refuses the project. Being open source opens nothing by itself — set_project_public does, and needs it. | |
| projectTypeKey | No | Jira project type: 'software' (the default), 'business' or 'service_desk'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the annotations (readOnlyHint=false, destructiveHint=false) by disclosing idempotent retry semantics (same key+name returns created:false), key-collision refusal that names the conflicting project, refusal of taken keys instead of auto-suffixing, and that openSourceRepo is host-verified without a token. The auth model for workspace admins and parent-subproject leads is spelled out.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the authorization constraint and the key-immutability warning before the idempotency and subproject details. It is dense and fairly long, but every sentence carries a distinct operational fact; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A mutating, 7-parameter tool with no output schema needs to explain the return and failure modes, and it does: created:false on retry, refusal with the conflicting project's name, and host-verification failure for openSourceRepo. Nothing an agent needs in order to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description still adds real meaning beyond the schema — that the key is always caller-supplied and never generated, that the lead defaults to the caller and is required for later configuration, and that parentKey implies inherited access so only non-inherited people need adding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("create a project") and enumerates what gets created — a key, a starter board, a wiki space — which distinguishes it immediately from create_issue, create_project_rule and create_wiki_page. The scope (workspace-level project provisioning) is unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly gates usage on role ("Administrators only", plus parent lead for subprojects) and explains that deletion is not available here, which routes the agent away from using this tool as a lifecycle manager. It does not name a concrete alternative for removal, so it stops short of full when/when-not/alternatives coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_project_ruleCreate project ruleAInspect
Add a rule to a project: when an issue enters 'status', append 'template' to its description. A rule appends its checklist to an issue's description when the issue ENTERS the rule's state — from the board, the Jira API or update_issue alike. The block starts with a hidden marker line '[//]: # (pm-rule:)'; while that line is in the description, entering the state again adds nothing (the journal says 'alreadyThere'). A [~username] in the template is a mention: that person is notified when the checklist lands. A checklist that would make the description too long is not added and the journal says 'tooLong'; the move itself still happens. 'trigger' says WHEN: 'entered' (the default — the issue entered 'status'), 'versionReleased' (a version it goes out in was marked released), 'subtasksDone' (every issue under it is finished — the rule acts on the PARENT) or 'subtaskStarted' (an issue under it was taken into work — the parent again); or what the project's repository said through its webhook: 'branchCreated' (a branch naming the issue was made), 'mrOpened', 'mrMerged' or 'mrClosed' (a merge request — a pull request on GitHub — naming the issue was opened, merged, or closed without merging). An issue is named by its key in the branch, the title or the description, and only this project's issues are touched. 'branch' narrows the three merge-request events to a request going INTO that branch, e.g. 'main'. Nobody is behind a webhook, so such a rule acts as whoever last saved or switched it on, whatever its action. 'deployed' fires when a pipeline reports that the issue went out to an environment (report_deployment); 'environment' narrows it to one of the project's environments by name, e.g. 'staging'. 'actChanged' fires on the issues that cite a legal act when its publisher's text changed, and 'actTouched' only on those where the change is in the place they cite (or that cite the act as a whole) — found once a week, only in a project with the «Legal acts» add-on; 'claimBasisChanged' fires on the issues that cite a claim ([thm:…], [claim:…]) whose legal basis is such an act, once per new text and claim; nobody is behind a publisher either, so these act as the rule's owner too. Only 'entered' has a 'status'; pass an empty one for the others. 'fromStatus' narrows any of them to an issue coming from that state: the state it has just left for 'entered', the state it stands in for the rest. A rule with action 'move' MOVES the issue to 'moveToStatus' instead of appending anything, and has no template (pass an empty one). The move is an ordinary one — made as whoever last saved or switched on the rule, asked of the project's workflow, written to the history with the rule's name, and followed by the rules of the state it lands in. A workflow that refuses it leaves a 'moveRefused' line with the reason in the journal and nothing else; 'moved' is a move made; 'tooDeep' is a move not made because rules had already moved issues three times off one event. A rule with action 'agent' is a DUTY instead: it says which issues may be handed to an agent role (agentRole, e.g. 'product') and what the agent may do with them. Its 'template' is then the INSTRUCTION — what doing such an issue means in this project — and nothing is appended anywhere. A duty may have no state (pass an empty 'status'): then an issue is handed only by a person. agentActions is a list from: describe, subtasks, ask, wiki, report, support, jira (propose a move or a comment in the project's linked Jira, applied by a person). agentFields names the fields it may set: priority, labels, duedate, or the project's own fields by name. doneStatus is the state it moves the issue to when done — never a finished one. capUsd raises what one task may cost, up to 5 dollars. Commenting is always allowed; finishing, deleting, reassigning and anything outside the issue never are. Saving or switching on a duty makes it yours: it runs on your behalf and access, and is switched off if you lose the project. The state and the type are NAMES of this project's own (list_project_rules lists them); an unknown one is refused with the list. Project lead or admin only.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | What the rule is called, e.g. 'Document pack'. At most 120 characters. | |
| type | No | Only issues of this type, by name, e.g. 'Bug'. Leave out for any type. | |
| label | No | Only issues carrying this label (one word). Leave out for any label. | |
| action | No | 'checklist' (the default), 'move' to move the issue to 'moveToStatus', or 'agent' for a duty. Fixed once the rule exists. | |
| branch | No | For 'mrOpened', 'mrMerged' and 'mrClosed': only a merge request going into this branch, e.g. 'main'. Leave out for any. | |
| capUsd | No | For a duty: what one task may cost, in dollars, when more than the ordinary ceiling is needed. At most 5. | |
| status | Yes | The state whose ENTRY fires the rule, by name, e.g. 'Ready for review'. For a duty taken only by hand, an empty string. | |
| enabled | No | Whether the rule is on from the start. Default true. | |
| trigger | No | WHEN the rule fires: 'entered' (the default), 'versionReleased', 'subtasksDone', 'subtaskStarted', or from the repository's webhook 'branchCreated', 'mrOpened', 'mrMerged', 'mrClosed', or 'deployed' when a pipeline reports a deployment, or 'actChanged' / 'actTouched' when a legal act the issue cites changed, or 'claimBasisChanged' when a claim the issue cites rests on an act that changed. For any but 'entered', pass an empty 'status'. | |
| template | Yes | The checklist, as Markdown: a '### Heading' per group, '- [ ] item' per line, two spaces of indent to nest an item under another, and [~username] on an item to name who does it. For a duty: the instruction. | |
| agentRole | No | For a duty: the agent role's key, e.g. 'product'. | |
| doneStatus | No | For a duty: the state it moves the issue to when done. Never a finished state. Leave out and it does not move the issue. | |
| fromStatus | No | Only an issue coming from this state, by name. Leave out for any. | |
| projectKey | Yes | Project key, e.g. 'ONB'. | |
| agentFields | No | For a duty: the fields it may set, comma-separated — priority, labels, duedate, or a project field's name. | |
| environment | No | For 'deployed': only a deployment to this environment of the project, by name, e.g. 'staging'. Leave out for any. | |
| agentActions | No | For a duty: what the agent may do beyond commenting, comma-separated — describe, subtasks, ask, wiki, report, support, jira. | |
| moveToStatus | No | For action 'move': the state the issue is moved to, by name — finished ones included. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses duplicate suppression via the hidden pm-rule marker, tooLong and tooDeep failure behavior, moveRefused journal outcomes, ownership semantics for webhook and duty rules, spending caps, and permission constraints. This goes far beyond what the annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core behavior is front-loaded, but the bulk is a single dense paragraph covering every rare trigger and edge case. The length is defensible for an 18-parameter tool with many modes, yet grouping or line breaks would make it substantially easier to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all action modes, trigger edge cases, failure outcomes, ownership rules, permissions, and expected name lookup via list_project_rules. Although there is no output schema, the description explains the important side effects and journal outcomes an agent needs to understand.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema has 100% description coverage, the prose adds important cross-parameter meaning: non-entered triggers require an empty status, move ignores template, a duty's template is an instruction rather than appended text, and fromStatus means different states depending on trigger type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a precise verb-resource-effect: 'Add a rule to a project: when an issue enters status, append template to its description.' It then distinguishes the three action modes (checklist, move, agent duty) and signals that action is fixed after creation, which separates it from update_project_rule.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the permission requirement ('Project lead or admin only'), when to pass an empty status or template, how trigger values map to situations, and that list_project_rules lists valid state and type names. It effectively guides the agent through choosing among many trigger/action combinations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_term_embedCreate term embedAInspect
Put one confirmed term of a project on other sites (PM-1165, PM-1166): a link anybody can open with no account, which shows the term's word, its definition with its formulas and — while the project is public — where it is defined; nothing else of the project. Answers with the ready code: 'script' once per page and 'mark' around the words on the site, which open the term in a cloud, or 'iframe', a card. Name the term by 'id' (list_terms), or by 'project' and 'term' — its word or any spelling. 'sites' limits which sites may show it (https://example.org each; none is any); 'days' gives it a term (none is until removed). Only for somebody who may write in the project and open the term's source; a line in the project's history. For many terms of one article, create_embed_set gives one link for all of them.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | The term's id, as list_terms returned it. Or name it by 'project' and 'term'. | |
| days | No | Days the link answers, 1 to 3650. Optional: none is until it is removed. | |
| term | No | The term's word or one of its spellings, with 'project'. | |
| sites | No | Sites that may show it, comma-separated, as https://example.org. Optional: none is any site. | |
| project | No | The project key, with 'term'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say it is a non-readonly, non-destructive, non-open-world mutation; the description adds substantial context beyond that: what a public viewer sees, that it writes a line in project history, the authorization requirements, and the exact return artifacts ('script', 'mark', 'iframe'). This is rich disclosure an agent could not get from the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose before parameters, alternatives, and permissions. The single dense paragraph with heavy em-dash and parenthetical nesting makes it harder to scan than necessary, but nearly every clause carries information and nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description fully covers the return value (the generated embed code variants), side effects (history entry), permissions, and optional-parameter defaults. An agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so baseline would be 3, but the description adds real meaning: 'term' accepts its word or any spelling, 'sites' takes comma-separated https origins with 'none is any', and 'days' 1-3650 with 'none is until removed'. It also cross-references list_terms for obtaining 'id'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: puts a confirmed term on other sites as an embeddable link, and describes exactly what the embed exposes (word, definition with formulas, source location while public). It distinguishes itself from the sibling create_embed_set explicitly ('For many terms of one article, create_embed_set gives one link for all of them').
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear condition for use (one confirmed term) and names the alternative (create_embed_set for many terms of one article). Permissions are stated ('Only for somebody who may write in the project and open the term's source'). It does not contrast with the other embed siblings (create_wiki_embed, create_claim_embed), but the resource distinction is implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_versionCreate versionAInspect
Add a version to a project, at the end of its sequence. A version is what a project's work goes out in — '2.4.0', 'Autumn'. It is the project's own: an issue carries versions of its own project only, any number of them ('fixVersions' on create_issue, update_issue and get_issue; JQL 'fixVersion = "2.4.0"', 'fixVersion in unreleasedVersions()'). The name is unique in its project, whatever the case. Answers with the version as list_versions gives it. Releasing it is release_version's. Project lead or admin only.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The version's name, e.g. '2.4.0'. | |
| startDate | No | The day work on it starts, as YYYY-MM-DD. | |
| projectKey | Yes | Project key, e.g. 'ONB'. | |
| description | No | What is in it, in a sentence. | |
| releaseDate | No | The day it is meant to ship, as YYYY-MM-DD. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: discloses the uniqueness constraint (name unique in project, case-insensitive), the authorization requirement (project lead or admin only), where in the sequence the version lands, and that the response matches list_versions. These are non-obvious constraints an agent could not infer from readOnlyHint/destructiveHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and the key constraint; every sentence conveys something actionable. The parenthetical enumeration of fixVersions call sites and JQL examples is somewhat verbose relative to the core task, but it is informative rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter create tool with no output schema and no annotation coverage of auth or uniqueness, the description supplies permissions, uniqueness, placement semantics, and the shape of the returned object. An agent has enough to invoke it correctly and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the parameters are already documented; the description still adds value by stating the name uniqueness/case rule and by clarifying that issue-level versions come from the issue's own project. It adds constraint semantics rather than restating field types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Add a version to a project') plus a positional qualifier ('at the end of its sequence'), and defines what a version is with concrete examples. It is clearly distinguishable from update_version and release_version, the latter explicitly claimed elsewhere.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It scopes usage by noting that a version belongs to its project and that any number of them can be attached, and it explicitly routes release behavior to release_version rather than doing it here. It does not explicitly contrast create_version with update_version, so the when-to-use picture is clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_wiki_embedCreate wiki embedAInspect
Put one scene of a wiki page on other sites (PM-1076): a link anybody can open with no account, which plays the block's scene in our player and shows nothing else of the page — not its title, its words, its space or its author, only the 'caption' you give. Answers with the link and the ready to paste into a site. The block is named by 'language' (anim, or anim-js where the company has scenes written in code) and its 'block' number among that kind's blocks, as get_wiki_page's 'anims' numbers them; the embed follows the block, so an edit of the scene shows everywhere. 'sites' limits which sites may frame it (https://example.org each; none is any); 'days' gives it a term (none is until removed). Only for somebody who may edit the page; it is a line in the page's history. delete_wiki_embed takes it down everywhere at once.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Page id. | |
| days | No | Days the link answers, 1 to 3650. Optional: none is until it is removed. | |
| block | Yes | The block's number among the page's blocks of its language, from 1 — 'block' in get_wiki_page's 'anims'. | |
| sites | No | Sites that may frame it, comma-separated, as https://example.org. Optional: none is any site. | |
| caption | No | A line shown under the scene. Optional. | |
| language | No | 'anim' (default) or 'anim-js'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the annotations: the link is public with no account, exposes only the scene and caption, returns both a link and ready <iframe>, follows subsequent block edits, requires page-edit permission, and writes a history entry. These details materially improve safe invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and response format are front-loaded and every sentence carries information, but the description is long and repeats some schema detail such as sites/days/caption behavior. It could be trimmed without losing essential meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description explains the return payload (link and iframe), permission requirements, history side effect, edit propagation, and removal path. An agent has enough information to call the tool correctly and understand its effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description adds real meaning by tying 'block' to get_wiki_page's 'anims' numbering and explaining the 'anim' vs 'anim-js' language distinction. However, sites, days, and caption largely restate the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Put'), resource ('one scene of a wiki page'), and target ('other sites'), and immediately clarifies what the resulting link exposes and withholds. This clearly distinguishes creation from update_wiki_embed, delete_wiki_embed, and list_wiki_embeds.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the core use case and a permission gate ('Only for somebody who may edit the page'), plus names delete_wiki_embed as the removal alternative. It does not explicitly contrast with update_wiki_embed for modifying an existing embed, but the guidance is otherwise clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_wiki_pageCreate wiki pageAInspect
Create a wiki page from Markdown in a space you can write to. Hangs off the space home page unless you name a parent (by 'parentId', or by 'parentTitle' within the same space). Returns the new page id and its URL. Mention someone as @Their Name — on a wiki page that is the form that notifies, not the [~username] used in issues; link another page as text or text. A ```anim block (a scene as JSON the reader's browser plays — product_help topic 'anim') is read at once: the answer's 'anims' says, per block, whether it plays or every problem with where it stands. Answers with 'notified' (who this actually reaches) and 'unresolvedMentions' (what looked like a mention and reached nobody, each with a reason) — a wrong handle is stored as written and never refused, so that list is the only sign it did not land.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Page title. Must be unique within the space — the title is how pages are addressed here. | |
| labels | No | Labels to set, space or comma separated. Stored in lower case, except a label starting with '$', which is kept exactly as written. The label 'template' offers the page as a template: people then make pages from it. | |
| markdown | No | Page body as Markdown, which also carries $…$ / $$…$$ LaTeX formulas and the wiki's macros on a line of their own — {toc}, {children}, {info} … {info}, {expand:title=…} … {expand}. A theorem, lemma, proposition, corollary, conjecture or question is a block of its own — ::: theorem {#thm:label status=computer number=5.8 title="…"} on its line, the statement, then ::: — read into the project's register of claims at the save (list_claims); 'claims' in the answer says which. | |
| parentId | No | Parent page id. Omit to hang the page off the space home page. | |
| spaceKey | Yes | Space key, e.g. 'PM'. Every project has exactly one space, keyed like the project. | |
| templateId | No | Make the page from a template: the id of a page of the same space that carries the label 'template' (search_wiki finds them by that label). The new page starts as the template's text and its other labels; 'markdown', when you send it too, wins. | |
| parentTitle | No | Parent page title, as an alternative to 'parentId'. Must be a page in the same space. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes far beyond the annotations (readOnlyHint=false, destructiveHint=false): it discloses the return payload (new page id and URL) and, crucially, that a wrong mention handle is stored as written and never refused, so 'unresolvedMentions' is the only signal of failure. It also flags that the anim block answer reports per-block playback problems — non-obvious side-effect behavior an agent would otherwise miss.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the action and the default parent in the first two sentences before the denser Markdown/mention/anim detail. The single-paragraph block is information-dense and every clause carries operational consequence, though it is longer than needed for a create tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still tells the agent what comes back ('page id and URL', 'anims', 'notified', 'unresolvedMentions', 'claims'), which is exactly the completeness burden this tool carries. Combined with a 7-parameter schema already at full coverage, nothing essential to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema doesn't carry: the [@Name](user:username) mention form specific to wiki pages (vs [~username] in issues), the [text](page:Title) cross-link syntax, and the ```anim block contract resolved against product_help topic 'anim'. It complements rather than duplicates the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a wiki page from Markdown') plus a scope constraint ('in a space you can write to') and the default placement ('Hangs off the space home page unless you name a parent'). The verb 'create' clearly separates it from update_wiki_page/delete_wiki_page and the Markdown body separates it from create_wiki_embed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete routing rules for the placement decision: omit parent to hang off the space home page, or name one via parentId or parentTitle within the same space. It also explains the template-vs-markdown precedence. It stops short of explicit 'use update_wiki_page instead when the page exists' guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
decide_join_requestDecide join requestADestructiveInspect
Approve or decline one request to take part in a public project (ids from list_join_requests). Approved, the person becomes a reporter there — files issues and comments; a broader role is given on the project's people screen, as for anybody on the board. Declined, they may ask again in 14 days. The person is told by email either way, and the decision is written to the company's journal. Only the project's owner and its administrators may decide.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The request's id. | |
| approve | Yes | true to let them in as a reporter, false to decline. | |
| projectKey | Yes | Key of the public project, e.g. 'LIB'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the annotations: approval grants the reporter role with issue/comment rights, decline imposes a 14-day re-request window, both outcomes trigger an email and a company journal entry, and only the project owner/administrators may call it. These are real consequences that the destructiveHint flag alone cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The action is front-loaded in the opening sentence and each subsequent sentence carries a distinct consequence (role, cooldown, notification, permissions). Slightly dense with em-dash clauses, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter mutation with no output schema, the description supplies the side effects, authorization requirement, reversal/cooldown behavior, and the sourcing of the id. An agent has everything needed to call it correctly and safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description's framing of approve (reporter grant vs. decline) largely restates the schema's own parameter descriptions; the only added value is the pointer to list_join_requests for the id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair (approve/decline) applied to a specific resource (one request to take part in a public project). It also names where the ids come from (list_join_requests), which lets an agent distinguish it from sibling decision tools like decide_persons or decide_terms.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent to list_join_requests for ids and notes that broader role assignment happens on the project's people screen, implicitly steering that need elsewhere. It does not state a when-not-to-use case, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
decide_personsDecide personsADestructiveInspect
Confirm or reject every PROPOSED person of one source at once — the persons the reading found on one page, issue or comment. 'source' as list_persons' 'sources' names it; 'expected' is how many proposed persons of it you were shown, and if the count has changed nothing is written. Ask the person first. Members of the project who may write only. Only where the company's plan includes AI.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Only those with a spelling holding these words, as list_persons' 'q'. | |
| state | Yes | 'confirmed' or 'rejected'. | |
| source | Yes | The source: 'page:471', 'issue:KYC-12', 'comment:88', 'wikicomment:7' or 'none'. | |
| project | Yes | The project key. | |
| expected | Yes | How many proposed persons of the source you read in list_persons. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description discloses important behavior: the expected count acts as a guard and nothing is written if the count has changed, write-access permission is required, and availability is gated by the company's AI plan. It also adds a human-confirmation workflow requirement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded, and the description is compact with no wasted explanation. A few short permission/gating sentences are terse fragments rather than polished prose, but they remain informative and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive batch mutation with no output schema, the description covers the key invocation details: scope, source format relation, concurrency guard, permissions, plan gating, and human confirmation. It does not describe success responses or whether decisions are reversible, but it is otherwise complete enough to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already defines all five parameters. The description still adds semantic value for source and expected by linking source naming to list_persons and explaining that expected is a count guard that prevents writes when stale.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: confirm or reject every PROPOSED person of one source at once, scoped to the persons found in one page/issue/comment. It also names the related sibling list_persons, so the agent can distinguish this batch decision tool from the listing tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: it is a batch decision over proposed persons of a single source, and it says to ask the person first. It does not explicitly compare against alternatives such as individual person editing or merging, but the scope and prerequisites are clear enough for correct invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
decide_support_letterDecide support letterADestructiveInspect
Decide what a held or failed letter to the support address is. 'release' files it as if it had just arrived, past the spam filter and the limits: it joins the request it proves it answers, or opens a new one (and the sender gets the usual acknowledgement). 'dismiss' says it is not a request; its files are dropped and the row is deleted with the other unfiled letters after 30 days. Requires full write access to the support project.
| Name | Required | Description | Default |
|---|---|---|---|
| decision | Yes | 'release' or 'dismiss'. | |
| letterId | Yes | The letter's id, from list_support_letters. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: 'release' bypasses the spam filter and limits and matches or opens a request with an acknowledgement, while 'dismiss' drops files and deletes the row after 30 days. It also states the full-write-access requirement, and these details are consistent with destructiveHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded and nearly every clause carries information, but the long parenthetical-heavy sentences make it denser than needed. Slight tightening would improve it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive two-parameter tool with no output schema, it covers the effects, the permission prerequisite, and the retention consequence. It does not say what the call returns or whether the action can be undone, which leaves a small gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real semantics for the 'decision' values, explaining the downstream consequences of each. The 'letterId' parameter is only covered by the schema, so it is not a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Decide what a held or failed letter to the support address is') and pins down the two possible outcomes. It is clearly distinguishable from get_support_letter and list_support_letters, which only read letters.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Scopes use to held or failed letters and points at list_support_letters for the id via the schema. It does not explicitly state when not to use it or name a sibling alternative for handling letters, 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.
decide_termsDecide termsADestructiveInspect
Confirm or reject every PROPOSED term of one source at once — a wiki page or an issue the terms were found on — as the terms screen's «Confirm all on this page» does. Read them first with list_terms and that 'source', and pass 'expected': how many proposed terms you read there. If the count is different now (somebody decided some, or the page was read again), nothing is written and the answer says so — read the list again. Confirm only what the person asked for. Members of the project who may write only. Only where the company's plan includes AI.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Only these kinds, comma-separated, as list_terms takes them. | |
| state | Yes | 'confirmed' or 'rejected'. | |
| source | Yes | The source, as list_terms' 'sources' names it: 'page:471', 'issue:KYC-12' or 'none'. | |
| project | Yes | The project key, e.g. KYC. | |
| expected | Yes | How many proposed terms of this source you read — 'total' of list_terms with state 'proposed' and this source. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real context beyond the annotations: an optimistic-concurrency guard where nothing is written on count mismatch, plus permission ('members who may write only') and plan gating ('only where the company's plan includes AI'). It does not say what 'reject' does to a term afterward or whether it can be undone, which matters given destructiveHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action is front-loaded and each following sentence carries a distinct rule: precondition, failure mode, safety instruction, permissions, plan gate. No filler despite the density of the first sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a bulk destructive mutation with no output schema, it covers preconditions, failure semantics, permissions and plan gating. The gaps are the effect/reversibility of 'reject' and the shape of the response beyond the count-mismatch case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description ties 'source' and 'expected' back to list_terms' output ('total' with state 'proposed'), which is helpful cross-tool guidance, but it adds nothing about 'kind' and little syntax beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair and resource with exact scope: 'Confirm or reject every PROPOSED term of one source at once', and anchors the behavior to a known UI action ('Confirm all on this page'). That clearly separates it from list_terms (read), set_term (single term) and decide_persons.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit prerequisite and workflow: read first with list_terms using the same 'source', then pass 'expected' from that read. It also states the recovery path when the count drifted ('read the list again') and a scoping rule ('Confirm only what the person asked for').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
define_termDefine termARead-onlyInspect
What a word means IN THIS COMPANY'S PROJECTS — a code like 'PW06' or 'F24', a project's own name for something, a notion its pages define ('петля', 'размерная подгруппа'). Ask it before guessing at a word you do not know in an issue or a page: the answer is the project's own short definition, where it is defined (a wiki page or an issue, and the heading on it) and the other ways it is written, and 'links' — the terms its definition rests on ('way': 'out', kind 'dependsOn' or 'specialCaseOf'), the ones that rest on it ('in'), and its opposites ('oppositeOf') — so a notion is read after what it rests on; term_graph has the whole picture. Matches the term or any of its spellings, case aside, then terms that begin so. Only confirmed terms, and only those whose source you may open. Empty 'terms' means the projects do not define it — then it is an ordinary word, or ask a person. Only where the company's plan includes AI.
| Name | Required | Description | Default |
|---|---|---|---|
| word | Yes | The word or phrase, as you met it, e.g. 'PW06' or 'размерных подгрупп'. | |
| project | No | A project key to look in it and its parent projects only. Leave out for every project you can read. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Although annotations already declare readOnlyHint/openWorldHint=false/destructiveHint=false, the description goes well beyond them: it discloses filtering rules ("Only confirmed terms, and only those whose source you may open"), a licensing constraint ("Only where the company's plan includes AI"), and the 'links' relationship kinds returned. That is substantial behavioral context beyond the annotation set.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose and the when-to-use instruction are front-loaded in the first sentences, and most clauses carry real information. It is dense and slightly over-stuffed with parenthetical nesting, so it falls short of maximal conciseness, but nothing is clearly redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the return-value burden and does: it explains the definition, where it is defined, spelling variants, the links structure, and what an empty result means. With only two well-documented parameters, this is complete enough to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents 'word' and 'project'; baseline is 3. The description adds meaning beyond it by describing matching behavior ("Matches the term or any of its spellings, case aside, then terms that begin so") and the read-scope constraint, which directly clarifies how the 'word' input is interpreted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete resource (a project's own definition of a word, code, or notion), gives examples, and explicitly distinguishes itself from the sibling 'term_graph' ("term_graph has the whole picture"). An agent can tell exactly what this returns without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It prescribes when to use it ("Ask it before guessing at a word you do not know in an issue or a page"), points to the alternative for the full picture, and states the fallback behavior when the result is empty ("ordinary word, or ask a person"). Exclusions and alternatives are both covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_agent_usageDelete agent usageADestructiveInspect
Remove one agent-usage record from an issue, by the id that get_agent_usage returns. For correcting a record's numbers, re-send it with report_agent_usage instead — the same source + externalId updates in place. Requires permission to edit the issue.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Record id, as returned by get_agent_usage. | |
| key | Yes | Issue key, e.g. 'UK-1'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so permanence is flagged structurally. The description adds genuine value with the edit-permission requirement and the upsert behavior of the sibling, but says nothing about what happens when the id is unknown or already deleted, or whether the removal is recoverable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short clauses, front-loaded with the action and scope, then the alternative, then the permission gate. No filler and nothing an agent must skip past to act.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter delete with full schema coverage and destructiveHint already declared, this covers action, identifier provenance, alternative path, and authorization. Only the failure/not-found behavior is left unspecified, which is a minor gap given annotations carry the safety profile.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters are self-documenting ('Record id, as returned by get_agent_usage'; 'Issue key, e.g. UK-1'). The description's mention of the id source essentially restates the schema, adding no format or edge-case detail beyond it, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Remove one agent-usage record from an issue') plus the exact identifier source ('by the id that get_agent_usage returns'). That distinguishes it cleanly from its nearest siblings, get_agent_usage and report_agent_usage, without needing to open either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the correction use case away from this tool: 'For correcting a record's numbers, re-send it with report_agent_usage instead — the same source + externalId updates in place.' It also names the precondition ('Requires permission to edit the issue'), so both the alternative and the gate are stated rather than inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_attachmentDelete attachmentADestructiveInspect
Remove a file from an issue, by 'filename' or by attachment 'id' — both come back from get_issue. Requires permission to edit issues in that project.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Attachment id, as listed by get_issue. An alternative to 'filename'. | |
| key | Yes | Issue key, e.g. 'UK-1'. | |
| filename | No | File name to remove, as listed by get_issue. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the bar is lower. The description still adds real value beyond them: it discloses the authorization requirement ('requires permission to edit issues in that project') and the prerequisite lookup step, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that leads with the action and resource, then the identifier options, then the permission constraint. No filler and nothing buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter mutation with no output schema and annotations that already flag destructiveness, the description covers the key agent needs: which identifiers to use, where to get them, and the permission gate. Only edge-case behavior (supplying both id and filename, or a missing file) is left unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description reinforces that filename and id are mutually exclusive identifiers and reiterates their provenance from get_issue, but that provenance is already stated in the schema descriptions, so it adds little beyond structured data.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Remove a file from an issue') and names the two accepted identifiers. Scoping the removal to an issue implicitly separates it from delete_wiki_attachment, but no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description tells the agent where the identifiers come from ('both come back from get_issue') and states a permission prerequisite, which is useful context. It does not state when to prefer this over alternatives such as delete_wiki_attachment, nor what happens if both id and filename are supplied — usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_chat_messageDelete chat messageADestructiveInspect
Delete a message you wrote, as the screen does: its words and files are gone for everybody, and the message stays in its place as «deleted» so the replies to it still point somewhere. Cannot be undone. Only your own message.
| Name | Required | Description | Default |
|---|---|---|---|
| chatId | Yes | The chat's id. | |
| messageId | Yes | The message's id — one you wrote. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare destructiveHint=true; the description goes well beyond that by explaining that words and files disappear for everybody, that a «deleted» placeholder remains so replies still resolve, that the action is irreversible, and that it is restricted to the caller's own messages. This is exactly the operational 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence covering effect, side effect, irreversibility, and permission, with no filler. Every clause carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with no output schema, the description covers consequences, persistence semantics, and authorization scope. It omits only what the call returns (e.g. the deleted message id or success flag), a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents chatId and messageId. The description nonetheless adds a real constraint on messageId — it must be a message the caller wrote — which the schema only hints at.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (delete) and resource (a chat message you wrote), plus an ownership scope that separates it from generic message operations. It does not explicitly name edit_chat_message as the non-destructive sibling, so differentiation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'As the screen does' and 'Only your own message' imply when the tool applies, and 'Cannot be undone' signals the risk profile of the choice. However, no alternative is named (e.g. edit_chat_message for corrections) and no explicit when-not guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_claimDelete claimADestructiveInspect
Remove a claim from a project's register for good, with what it rests on — it cannot be undone, so do it only when the person asked for this very one to be deleted; confirm its label with them first. Its journal keeps its lines and one that it was deleted. A claim that turned out false is not deleted: set_claim_status 'refuted' or 'retracted' keeps it said. Members of the project who may write only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | The claim, as list_claims returned it. | |
| label | No | The claim's label, with 'project'. | |
| project | No | The project key, with 'label'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, and the description goes well beyond them: irreversibility, the post-delete journal state (lines kept plus a deletion record), and the write-permission requirement. That is real consequence disclosure 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and the irreversibility warning, then the alternative and the permission note — no filler sentences. The phrasing 'with what it rests on' and 'keeps it said' is more literary than precise and costs a little parsing effort.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, no-output-schema tool with fully documented parameters, the description covers the gaps that matter: reversibility, side effects on the journal, the safer sibling for false claims, and who may invoke it. Nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each of id, label, and project is documented there, so the schema carries the burden. The description only hints at the label parameter ('confirm its label with them first') and adds nothing about how id, label, and project combine, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Remove a claim from a project's register' — and immediately bounds the scope ('for good'), so an agent can tell it apart from set_claim, set_claim_status, and delete_* siblings on other resources. The only soft spot is the ambiguous clause 'with what it rests on', but the core action is unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('only when the person asked for this very one to be deleted'), a confirmation step ('confirm its label with them first'), and a named alternative for the common adjacent intent ('A claim that turned out false is not deleted: set_claim_status refuted or retracted'). It even states the permission gate ('Members of the project who may write only').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_computationDelete computationADestructiveInspect
Remove one computation from an issue, by the id list_computations gives — for a job reported against the wrong issue. To correct one, report it again under its own name instead. Requires permission to edit the issue.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The computation's id, from list_computations. | |
| key | Yes | Issue key, e.g. 'MATH-74'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered; the description contributes the permission prerequisite ('Requires permission to edit the issue'), which annotations cannot express. It stops short of stating reversibility or what happens if the id is stale, so it is strong but not complete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and scope, then the alternative, then the permission requirement. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter destructive tool with annotations and no output schema, the description covers action, id source, alternative path, and permissions. Error/staleness behavior is the only modest gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters are documented in-schema, including the id's provenance. The description's mention of 'the id list_computations gives' largely restates the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Remove one computation from an issue') plus the exact id provenance and the motivating scenario ('for a job reported against the wrong issue'). An agent can distinguish it from report_computation and list_computations without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the when ('reported against the wrong issue'), the when-not ('To correct one, report it again under its own name instead'), and names the sibling used to obtain the id (list_computations). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_credentialDelete credentialADestructiveInspect
Remove a credential, by the id from list_credentials — the value, its reader list and the record of who read it go with it, and it cannot be brought back. Only the person who attached it and the project's lead may. To take one person's access away, use update_credential's 'readers' instead.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Credential id, from list_credentials. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, it discloses that deletion also removes the value, reader list, and reading record, and that the action cannot be undone. It further explains who is authorized to perform the deletion, which is exactly the behavioral context an agent needs for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the destructive action and cascade, followed by authorization and the safer alternative. Every sentence contributes useful information without repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter destructive tool with annotations and no output schema, the description covers irreversibility, cascading data loss, authorization, and the safer alternative. There are no material gaps for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the single id parameter is already documented in the schema as coming from list_credentials. The description repeats that source but adds no further syntax, format, or validation semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It states a specific verb and resource: remove a credential by id. It also names the cascading effects and distinguishes the operation from update_credential, so an agent can identify exactly what this tool does among the credential-related siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit authorization constraints: only the person who attached the credential and the project lead may delete it. It also names the alternative for a narrower access change: use update_credential's 'readers' to remove one person's access.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_issue_scheduleDelete issue scheduleADestructiveInspect
Remove a recurring issue from a project. The issues it already filed stay as they are. The project's lead, the company's owner or an admin only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The schedule's id, as list_issue_schedules returned it. | |
| project | Yes | The project key, e.g. PM. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and openWorldHint=false. The description adds valuable behavioral context beyond those annotations: already-filed issues remain unchanged, and the action is restricted to the project lead, company owner, or admin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action and followed by the key side effect and permission constraint. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter destructive schedule deletion with full schema coverage and explicit destructive annotations, the description supplies the missing operational context: scope, side effect on already-filed issues, and authorization requirements. No output schema exists, so return-value explanation is unnecessary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both parameters are documented in the schema, including that id comes from list_issue_schedules. The description itself adds no parameter semantics beyond what the schema already provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific destructive verb ("Remove") and the resource (a recurring issue from a project), and the title clarifies that this targets an issue schedule. It is clearly distinguishable from sibling tools like list_issue_schedules and set_issue_schedule.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case by saying it removes a recurring issue, and it names who may perform the action. However, it does not explicitly compare this tool with alternatives such as set_issue_schedule for updating a schedule or list_issue_schedules for viewing one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_personDelete personADestructiveInspect
Remove a person from a project's register for good, with all their spellings and facts — it cannot be undone, so do it only when the person asked for this very one to be deleted; confirm the name with them first. The journal keeps a line that a person was deleted, without the name. To turn down a PROPOSED person use set_person with state 'rejected' instead, so they are not proposed again. Members of the project who may write only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The person, as list_persons returned them. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, but the description adds substance: permanence ('it cannot be undone'), the blast radius ('all their spellings and facts'), and the audit side effect ('the journal keeps a line that a person was deleted, without the name'). It also states the write-permission requirement, which annotations do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The destructive warning and confirmation requirement are front-loaded, and each sentence carries new information (irreversibility, audit trail, alternative tool, permissions). The trailing permission clause is a fragment that would read better placed earlier, costing it a point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter destructive tool with no output schema, the description covers everything an agent needs: irreversibility, confirmation step, the correct alternative for proposed persons, audit behavior, and the permission gate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter and schema coverage is 100%, with the schema itself explaining that the id comes from list_persons. The description adds no syntax or formatting guidance for the id beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Remove a person from a project's register') and adds scope detail ('with all their spellings and facts'). It also distinguishes itself from the nearest alternative by naming set_person with state 'rejected' and from list_persons as the source of the id.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use ('only when the person asked for this very one to be deleted; confirm the name with them first') and explicit when-not ('To turn down a PROPOSED person use set_person with state 'rejected' instead'), plus the authorization boundary ('Members of the project who may write only'). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_project_fieldDelete project fieldADestructiveInspect
Remove a column from a project. Answers with how many issues lost a value, because that number is what the decision was about — the issues themselves are untouched. Project lead or admin only.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Field name, e.g. 'Provider'. | |
| projectKey | Yes | Project key, e.g. 'CRM'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, but the description adds real value beyond them: it discloses that the response reports how many issues lost a value, that the issues themselves are untouched, and that lead/admin permission is required. That is exactly the consequence-and-auth context a destructive mutation needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action, followed by the return-value explanation and the permission constraint. The parenthetical rationale ("because that number is what the decision was about") earns its place by explaining why the count matters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive two-parameter tool with no output schema, the description covers the action, the return value, the non-effect on issues, and the authorization requirement. An agent has everything needed to call it correctly and safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters (name, projectKey) are documented with examples, so the schema carries the burden. The description adds no syntax or format detail about the field name beyond what the schema already provides; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Remove a column from a project"), which separates it from set_project_field and list_project_fields in the sibling set. It does not explicitly name those alternatives, so it stops just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The "Project lead or admin only" clause gives a prerequisite for calling it, which is useful. However, there is no explicit guidance on when to delete a field versus updating it via set_project_field, nor any warning about when not to use it, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_project_issue_typeDelete project issue typeADestructiveInspect
Remove an issue type of this project's own. Refused while any issue is of it or any field is kept for it — change those first; a rule on it goes with it. Project lead or admin only.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The own type's name. | |
| projectKey | Yes | Project key, e.g. 'TH'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, but the description adds content the annotations cannot carry: two blocking preconditions, a cascade side effect ('a rule on it goes with it'), and an authorization requirement ('Project lead or admin only'). That is exactly the extra context an agent needs before a destructive call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with no filler; the blocking conditions and the permission clause are packed in and front-loaded after the core action. Nothing could be cut without losing decision-relevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A two-parameter destructive mutation with no output schema needs exactly this: what it removes, what blocks it, what it cascades, and who may call it. All four are present, so an agent can decide correctly without further lookup.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The phrase 'of this project's own' adds real meaning to the `name` parameter, clarifying it must reference a project-scoped type rather than a shared/global one, which is not stated in the schema text 'The own type's name.'
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Remove an issue type') and narrows the scope to project-local types ('of this project's own'), which distinguishes it from global-type handling. It does not explicitly name set_project_issue_type as the sibling to use instead, but the action itself is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when the call will be refused ('while any issue is of it or any field is kept for it — change those first'), which tells the agent what to do before retrying. It doesn't name the sibling tools to run for that cleanup, 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.
delete_project_ruleDelete project ruleADestructiveInspect
Remove a project rule, by its id from list_project_rules. Checklists it already added stay in their issues; its journal goes with it. To stop it for a while instead, update_project_rule with enabled=false. Project lead or admin only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The rule's id, from list_project_rules. | |
| projectKey | Yes | Project key, e.g. 'ONB'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, but the description goes further and describes the actual blast radius: checklists it already added persist in their issues while its journal is removed with it. It also discloses the authorization requirement (project lead or admin only), 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, zero filler, with the destructive effect and the non-destructive alternative front-loaded before the permission note.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter destructive mutation with no output schema, the description covers the side effects, the safer alternative, and the authorization requirement — everything an agent needs before invoking it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (id, projectKey) are already fully documented in the schema, including the same 'from list_project_rules' pointer. The description adds no new syntax or format detail beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Remove a project rule') plus the identifier source ('by its id from list_project_rules'), which immediately separates it from create_project_rule and update_project_rule in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternative and the condition that selects it: 'To stop it for a while instead, update_project_rule with enabled=false.' It also states the permission gate, so an agent knows when it is not eligible to call this at all.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_registry_embedDelete registry embedADestructiveInspect
Take a term's, a claim's or a set's link down (PM-1168): it answers 404 at once on every site that has it — the clouds and cards there say the thing is not available. It cannot be undone; a link made again is a new one. Only for somebody who may write in the project; a line in its history.
| Name | Required | Description | Default |
|---|---|---|---|
| embedId | Yes | The embed's id, from list_registry_embeds. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond destructiveHint=true, it discloses that the 404 is immediate across all sites, that the deletion is irreversible, and that a re-created link is a distinct new entity rather than a restored one. It also notes the audit trail ('a line in its history') and the write-permission requirement, which annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The effect is front-loaded, but the internal ticket reference '(PM-1168)' and the colloquial clause 'the clouds and cards there say the thing is not available' restate the preceding 404 sentence rather than adding information. Three sentences of prose where two tighter ones would do.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter destructive tool with no output schema, the description covers effect, scope, irreversibility, permission and audit trail. It does not mention behavior on an already-deleted or unknown embedId, 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already tells the agent the embedId comes from list_registry_embeds. The description adds nothing about the parameter itself, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a concrete verb ('take ... link down') on a specific resource enumerated as a term's, claim's or set's embed, and the 404 propagation makes the effect unambiguous. It separates itself from delete_wiki_embed by scoping to registry embeds, though it never names that sibling as the alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear use context — you want the link to return 404 everywhere it appears — plus an explicit eligibility condition ('Only for somebody who may write in the project'). It stops short of naming when-not or which sibling to use for a non-registry embed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_sourceDelete sourceADestructiveInspect
Remove a source from a project's register for good, with its authors — it cannot be undone, so do it only when the person asked for this very one to be deleted; confirm its key with them first. Its journal keeps its lines and one that it was deleted. A source found to be wrong is not deleted: set_source 'check' 'mismatch' with the reason keeps it said. Members of the project who may write only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | The source, as list_sources returned it. | |
| source | No | Its key or an identifier it has, with 'project'. | |
| project | No | The project key, with 'source'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real context beyond the annotations: irreversibility, that the journal retains its lines plus a record of the deletion, and the permission requirement ('Members of the project who may write only'). The one gap is the ambiguous 'with its authors' — for a destructive call, whether author records are removed or merely orphaned should be stated unambiguously.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, correctly front-loaded with the irreversible warning, but the grammar is elliptical to the point of obscurity ('keeps its lines and one that it was deleted', 'keeps it said'). The agent has to parse garbled prose to extract otherwise valuable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, 3-parameter tool with no output schema, the description covers the destructive profile (also in annotations), the cascade, the permission gate, the confirmation requirement, and the sibling alternative. Nothing essential to calling it safely is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with each of id/source/project already documented and cross-referencing each other. The description only hints at identification ('confirm its key with them first') without adding syntax or precedence rules, so the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Remove a source from a project's register') and frames it as permanent, which distinguishes it from get_source/list_sources. The qualifying phrase 'with its authors' is ambiguous — it could be read as authors also being removed — so the operation's exact scope isn't fully crisp.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit precondition ('do it only when the person asked for this very one to be deleted; confirm its key with them first') and names the correct alternative for the adjacent case: a wrong source should be handled with set_source 'check' 'mismatch' rather than deleted. When-to-use, when-not-to-use and the alternative are all present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_termDelete termADestructiveInspect
Remove a term from its project for good — it cannot be undone or restored, so do it only when the person asked for this very term to be deleted; confirm the name with them first. To turn down a PROPOSED term use set_term with state 'rejected' instead — a rejected term is remembered and not proposed again; a deleted one may be found and proposed anew. Members of the project who may write only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The term, as list_terms returned it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, and the description adds genuinely new context beyond them: irreversibility, no restore path, the downstream consequence that a deleted term may be re-proposed while a rejected one is remembered, and the write-permission requirement. This is exactly the extra layer annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The permanence warning is front-loaded, the confirmation requirement follows, and the sibling alternative comes last as a redirect. Three dense clauses, no filler, each carrying operational weight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter destructive mutation with no output schema, the description covers danger, precondition, alternative route, and authorization. Nothing an agent needs in order to call it safely or correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and there is a single required 'id' parameter, whose schema description already tells the agent it comes from list_terms. The description adds no format, type, or resolution guidance beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ("Remove a term from its project") plus its permanence, and explicitly contrasts with the sibling set_term in 'rejected' state. An agent can distinguish permanently deleting a term from rejecting a proposed one without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use (only when the person asked for this very term), a precondition (confirm the name first), and a named alternative with its condition (to decline a PROPOSED term, use set_term with state 'rejected'). Both the positive and negative routing are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_wiki_attachmentDelete wiki attachmentADestructiveInspect
Remove a file from a wiki page, by its 'filename' as listed by get_wiki_page. Identify the page by 'pageId', or by 'spaceKey' + 'title'. References to it in the page body are left alone — they simply stop resolving, so tidy the body too if it named the file. Requires permission to edit the page.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Exact page title, when identifying the page by title. | |
| pageId | No | Page id (as returned by search_wiki). | |
| filename | Yes | File name to remove, as listed by get_wiki_page. | |
| spaceKey | No | Space key, when identifying the page by title. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only flag destructiveHint/readOnlyHint, but the description adds two things an agent cannot infer: the operation requires edit permission on the page, and body references are deliberately left dangling ('they simply stop resolving'), with the concrete remediation of tidying the body. That is precisely the kind of side-effect disclosure a destructive tool needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action, then the identification mechanics, then the non-obvious side effect. Nothing is repeated from the schema and no sentence could be removed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, no-output tool this covers the essentials: what is removed, how to target it, what is left behind, and the permission prerequisite. Combined with a fully described schema, an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 does add value by articulating the alternative identification modes (pageId vs. spaceKey + title) and by tying 'filename' to get_wiki_page output, which clarifies how the optional group is meant to be combined rather than used together.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ('Remove a file from a wiki page') and immediately scopes it to the wiki attachment concept, which separates it from the plain delete_attachment and the delete_wiki_embed siblings. The filename-based targeting tells an agent exactly what object is being acted on.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear selection conditions for the two identification routes ('Identify the page by pageId, or by spaceKey + title') and points at get_wiki_page as the source of valid filenames. It does not explicitly contrast with delete_attachment or warn when deletion is inappropriate, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_wiki_embedDelete wiki embedADestructiveInspect
Take an embed of a wiki page's scene down (PM-1076): its link answers 404 at once on every site that has it. It cannot be undone — an embed made again of the same block gets a new link. Only for somebody who may edit the page; a line in its history.
| Name | Required | Description | Default |
|---|---|---|---|
| embedId | Yes | The embed's id, from list_wiki_embeds. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the destructiveHint annotation: the deletion is irreversible, the link 404s immediately on every site, recreating an embed produces a new link, and the action leaves a history entry. This is exactly the kind of consequence information 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The critical information is front-loaded and packed into one dense sentence. It is efficient overall, though the parenthetical ticket number and trailing history note add slight bulk without much operational value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter destructive tool with a rich destructiveHint annotation and a fully documented schema, the description covers effect, reversibility, permission requirement, and audit behavior. No essential calling context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema explains that embedId comes from list_wiki_embeds. The description adds no parameter-specific meaning, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action and resource: taking down a wiki page's scene embed. It goes further by describing the immediate effect (the link answers 404 everywhere), which clearly separates it from update_wiki_embed, create_wiki_embed, and list_wiki_embeds.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear authorization condition: only for somebody who may edit the page. Usage context is therefore clear, but it does not explicitly name alternatives such as update_wiki_embed or state when not to use deletion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_wiki_pageDelete wiki pageADestructiveInspect
Delete a wiki page. Identify it by 'id', or by 'spaceKey' + 'title'. A page with children takes its whole subtree with it, so that is refused unless you pass includeChildren: true — the answer names what would go. The space home page can never be deleted. Requires permission to edit the wiki.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Page id (as returned by search_wiki). | |
| title | No | Exact page title, when identifying the page by title. | |
| spaceKey | No | Space key, when identifying the page by title. | |
| includeChildren | No | Delete the page's descendants along with it. Off by default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, so the bar is lower, yet the description still adds real behavior: subtree deletion semantics, the refusal path when children exist, the fact that the refusal response enumerates what would be deleted, the undeletable home page, and the edit-permission prerequisite. That is well beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each carrying a distinct fact — identification, subtree handling, home page, permission — with the destructive semantics front-loaded. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description pre-empts the one return behavior that matters (the refusal answer names the affected pages). For a 4-param, zero-required destructive tool, nothing an agent needs before calling is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning: it explains the id-or-(spaceKey+title) pairing as an identification strategy and frames includeChildren as an opt-in escape hatch rather than a plain boolean. Marginal gain over the schema, hence 4 not 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Delete a wiki page"), and the sibling set contains delete_wiki_attachment and delete_wiki_embed, which this clearly is not. 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the two identification modes (id, or spaceKey + title) and the two hard stop conditions (subtree refused without includeChildren, home page never deletable). It does not name sibling alternatives such as get_wiki_page for verification or delete_wiki_attachment, 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.
distinct_personsDistinct personsAInspect
Answer a hint of list_persons' 'similar' with «these are two different people» — «Mikhailov» and «Mikhaylov» who are not one — so the pair is not hinted again; or, with 'undo', take that answer back. ASK the person first, naming both as list_persons shows them; never decide it yourself from the names. A person merged into another answers as the one they were merged into. merge_persons on such a pair still merges, and the answer goes. Both journals keep a line. Members of the project who may write only. Only where the company's plan includes AI.
| Name | Required | Description | Default |
|---|---|---|---|
| a | Yes | One of the two, as list_persons returned them. | |
| b | Yes | The other. | |
| undo | No | true to take the answer back, so the hint may pair them again. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already say readOnlyHint=false and destructiveHint=false, but the description adds substantial context beyond that: the answer suppresses future hints, undo reverses that suppression, a merged person answers as their merge target, merge_persons overrides the answer, both journals record a line, and there are write-permission and AI-plan gates. This is meaningful behavioral disclosure. It loses a point only because 'Both journals keep a line' is vague about what is actually recorded.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action, but the prose is dense and occasionally cryptic ('who are not one', 'the answer goes'), and some clauses are hard to parse on first read. Every sentence carries some information, but the structure could be cleaner.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter mutation tool with no output schema, the description covers the call semantics, undo behavior, merge interaction, permission gates, and plan gates. It is nearly complete, though the journal-line consequence is underspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters, including the undo default and its purpose. The description restates the undo semantics without adding syntax, format, or edge-case detail beyond what the schema provides. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action against a specific resource: answering list_persons' 'similar' hint by declaring two persons distinct, or undoing that answer. It distinguishes itself from merge_persons and unmerge_person by contrast. The phrasing is slightly opaque ('Answer a hint...'), but the core verb+resource is identifiable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent when to use it (answering a 'similar' hint), how to proceed (ASK the person first, naming both as list_persons shows them), and what not to do ('never decide it yourself from the names'). It also explains the interaction with merge_persons, which is exactly the sibling an agent might confuse it with.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_chat_messageEdit chat messageADestructiveInspect
Change the words of a message you wrote, as the screen's «Edit» does: it says «edited», the chat's open screens show the new words at once, and nobody is told anew — a mention added by an edit notifies nobody. Only your own message, not a deleted one.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | The new text, Markdown. At most 32 KB. | |
| chatId | Yes | The chat's id. | |
| messageId | Yes | The message's id — one you wrote. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover write/destructive/open-world status, and the description adds non-obvious effects: the «edited» marker, immediate update on open screens, and that edits re-notify nobody, including added mentions. It omits whether prior content is recoverable, but that is a minor gap given annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence front-loads the action, then layers UI and notification effects. It is compact, though the colon-chained clauses require a careful read.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With full schema coverage and annotations supplying the safety profile, the description supplies the missing behavioral and precondition context. It is nearly complete, with only minor omissions such as history/reversibility.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so body/chatId/messageId are already documented, including Markdown format and the 32 KB limit. The description adds no parameter-level detail beyond what the schema provides; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Change the words') and resource ('a message you wrote'), and distinguishes the operation from send/delete siblings by limiting it to one's own non-deleted message. 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear preconditions — only your own message, not a deleted one — and frames it as the screen's Edit action, which implicitly separates it from send_chat_message and delete_chat_message. It does not explicitly name those alternatives, so it is not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
evaluate_wlEvaluate Wolfram LanguageARead-onlyInspect
Evaluate Wolfram Language with the very engine a wiki page's ```wl cells are evaluated by (mathics-core-rust's wl-wasm), on the server and now — to check an expression before putting it on a page, or what a page's cells will say. Pass 'code' for one cell, or 'cells' for several evaluated in one session and in order, as the page's «Evaluate all» does (a definition in one is seen by the next). The whole call has 10 seconds: the cell running when they are out is 'timeout', one that runs out of memory or stack is 'limit', and the cells after either are 'skipped'. Answers each cell's outputs — results with their Out[n], messages and prints, each as text, InputForm ('input') and TeX ('tex', 'latex') — and the engine, its commit and the seconds it took. Cells this engine already evaluated for a page of the company are answered from that output ('saved': true). Nothing is kept. Only where the company has the wiki.wl switch; at most 10 evaluations a minute per person.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | One cell of Wolfram Language, e.g. "Integrate[x^2 Sin[x], x]" or "Factor[x^4 - 1]". | |
| cells | No | Several cells, evaluated in one session and in order — instead of 'code'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes far beyond the readOnly/non-destructive annotations: discloses the 10-second whole-call budget, per-cell status semantics ('timeout', 'limit', 'skipped' and how downstream cells behave), that results may be replayed from cached page output ('saved': true), that nothing is persisted, that availability is gated by the wiki.wl switch, and the rate limit of 10 evaluations/minute per person. This is exactly the operational context annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense and front-loaded with the verb and engine, and nearly every clause carries operational value (limits, statuses, caching, auth gating). It is a single sprawling paragraph and the return-format enumeration is slightly list-heavy, but there is little filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by explaining return values: each cell's outputs (results with Out[n], messages, prints in text, InputForm, and TeX/LaTeX) plus the engine, commit, and elapsed seconds. Combined with the disclosed limits and caching, 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.
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 real meaning: 'code' is a single cell, 'cells' are evaluated in one session in order so a definition in one is visible to the next, and 'cells' is used 'instead of' code. That ordering/session semantics is not derivable from the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (evaluate) and resource (Wolfram Language), identifies the exact engine (mathics-core-rust's wl-wasm) and grounds it in a concrete artifact (wiki page's ```wl cells). An agent can distinguish this from sibling tools like code_calls or report_computation without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use conditions: check an expression before putting it on a page, or preview what a page's cells will say. Also routes between the two parameters ('code' for one cell vs 'cells' for several in one session). It does not name a sibling alternative tool, which is the only gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_sources_bibExport sources bibARead-onlyInspect
A project's register of sources as a BibTeX file's text: one entry per source, its key the source's (what \cite{} and [@KEY] name), the identifiers as eprint/archivePrefix (arXiv), doi, mrnumber, zbl, isbn; a source with the † says so in a comment above its entry. 'keys' narrows it to those sources; 'page' to the ones a wiki page of the project cites ([@KEY], or [KEY] where the key is a source's), in the order it first cites them. A paper's build fetches the same file by token at /api/projects/{project}/sources.bib (?page= for a page's), with an ETag. Anybody who sees the project.
| Name | Required | Description | Default |
|---|---|---|---|
| keys | No | Only these sources: keys separated by commas, e.g. 'GS90,IMP26'. | |
| page | No | Only the sources this wiki page cites: its id. | |
| project | Yes | The project key, e.g. MATH. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already covering read-only/non-destructive/closed-world, the description still adds substantial context: the exact entry format, identifier fields (eprint/archivePrefix, doi, mrnumber, zbl, isbn), the † comment marker, ordering behaviour for 'page', and the API/token/ETag equivalent. It also discloses the permission requirement ('Anybody who sees the project'), which is real behavioral information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and no sentence is filler, though the writing is compressed into long run-on clauses ('one entry per source, its key the source's...') that take a second read. Dense but every element earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by describing the returned file's structure, entry keys, identifier mapping, and comment markers. With permissions and filter behavior also stated, an agent has everything needed to call and interpret this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds semantics beyond the schema: that 'page' restricts to sources cited by that wiki page and preserves first-citation order, and that 'keys' selects an explicit set. The key-format detail (\cite{} / [@KEY]) also clarifies what the filter values mean.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: a project's register of sources rendered as a BibTeX file's text, plus exactly what each entry contains. An agent can tell this apart from import_sources_bib or list_sources without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains how the two filters narrow the export ('keys' to specific sources, 'page' to sources a wiki page cites in first-citation order), which implies when to use each. But it never names a sibling alternative or states when not to use it (e.g. versus list_sources for plain metadata), 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.
find_by_legal_documentFind by legal documentARead-onlyInspect
Which issues and wiki pages refer to a legal act — the list on the act's card. Per document the value names (the same act in two languages is two): 'total' issue-and-place and page-and-place lines, 'hidden' of them where you may not read (counted, never named), and 'items' — the 'place' cited with the 'issue' (key, summary) or the 'page' (id, title, spaceKey). Only accepted references in projects that keep them count; a comment's reference is its issue's. Name the act by its key (e.g. 32015L0849), its address, the document id, or words of its title. The same set of issues is JQL's legalRef = "…".
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many lines, at most 200. Default 50. | |
| project | No | Only this project's, by its key. Omit for every project you read. | |
| startAt | No | Where to start, for a list longer than one answer. | |
| document | Yes | The act: its key (e.g. '32015L0849'), its address, a document id, or words of its title. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld/destructive annotations, the description discloses real behavior: unreadable items are counted in 'hidden' but never named, only accepted references in projects that keep them count, and a comment's reference is attributed to its issue. These are non-obvious filtering and permission semantics that the annotations alone do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and no sentence is pure filler, but the body is compressed to the point of obscurity (e.g. "'total' issue-and-place and page-and-place lines", "the value names"), forcing the reader to re-parse dense parentheticals. Compression here costs comprehension rather than buying efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-shape burden and does so well, defining 'total', 'hidden', and the 'items' variants with their fields for issues and pages. Pagination and limits are left to the schema; only result ordering and precedence among identifier forms are unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and every parameter already carries a description, including the accepted identifier forms for 'document'. The description restates those identifier forms with the same example ('32015L0849') without adding syntax, matching rules, or precedence, so it does not exceed the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb and resource: it returns which issues and wiki pages refer to a legal act, framing the result as 'the list on the act's card'. That is concrete and separable from the sibling tools that fetch or mutate an act, but it never names a sibling (e.g. get_legal_document, list_legal_references, add_legal_reference), so the agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent gathers that this is the reference-lookup path for an act and that the JQL equivalent is legalRef = "…", which hints when to route to JQL instead. There is no explicit when-to-use/when-not or named alternative among the many legal_* siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_issuesFind issuesARead-onlyInspect
Find issues by what they are ABOUT, in plain words — by meaning as well as by words (where the server has its embedding model), so an issue that says the same thing differently or in another language is found, which search_issues (JQL) cannot do. The same search answers with pages (wiki pages) and files (PDF and Word files attached to an issue or a page, found by the words inside them): "everything on this counterparty" finds the contract and not only the issue that names it. Best first; match says what found each (words, meaning, or only near words — the weakest). unread_files lists the files this search could NOT read (a scan, a damaged or protected file, an old .doc): nothing found says nothing about those. Use search_issues for questions about fields (mine, overdue, in status X).
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | What it is about, in your own words. | |
| limit | No | How many of each kind to return (default 10, max 25). | |
| projectKey | No | Only this project (must be visible to the token). Omit for every project the token sees. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, it discloses that semantic search depends on the server's embedding model, that results are best-first, that `match` explains how each result was found, and that `unread_files` lists files the search could not read with the important caveat that absence of results says nothing about those files. This is rich behavioral context that annotations alone do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and contrast with search_issues are front-loaded, and most sentences carry useful information about returns and limitations. The phrasing is dense and occasionally meandering with parenthetical asides, so it is not maximally concise, but it avoids filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still explains the return shape (`pages`, `files`, `match`, `unread_files`) and the key limitation around unreadable files. For a three-parameter search tool, this is complete enough for an agent 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all three parameters. The description reinforces that `text` is for plain-language aboutness, but it does not add syntax or constraints beyond what the schema already provides for `limit` or `projectKey`; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource (find issues) and immediately scopes it to semantic/aboutness search rather than field search, explicitly naming the sibling search_issues (JQL) as the contrast. It also clarifies that the same search returns wiki pages and files, so an agent can distinguish its behavior without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use guidance for this tool (plain-language, meaning-based searches, including multilingual or differently phrased issues) and when to use the alternative (search_issues for field questions like mine, overdue, in status X). No inference is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_lean_declarationFind lean declarationARead-onlyInspect
Where a Lean declaration of a claim is declared — 'theorem rank5' in a .lean file — searched in the project's repositories that are open to its agents: the repository, the file, the line, the line's text and the commit the index is at. Pass the full name, e.g. 'D5.rank5_decided'; the file names its last part inside its namespace, so read the file when two places answer. Then bind a claim's basis to it with set_claim, {"kind":"lean","ref":"D5.rank5_decided","repo":"ispacex/d5"}. Members of the project who may write only.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The declaration's full name, e.g. 'D5.rank5_decided'. | |
| repo | No | Look in this repository only, by its path, e.g. 'ispacex/d5'. | |
| project | Yes | The project key, e.g. D5. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, non-destructive, closed-world), and the description adds real behavioral context: the search is limited to the project's repositories open to its agents, results reflect an index pinned to a commit, and the caller must be a project member who may write. That permission requirement is the kind of thing annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and every piece of information is relevant, but the opening is an awkward em-dash run-on that is hard to parse ('Where a Lean declaration of a claim is declared — ... — searched in ...: the repository, ...'). The content is fine; the grammar and density cost it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description's enumeration of returned fields (repo, file, line, text, commit) is load-bearing and present. It also covers ambiguity resolution and the downstream set_claim binding. Minor gaps: no indication of behavior when nothing is found, and the indexing/commit meaning could be spelled out more.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description earns a bump by explaining why 'name' must be the fully qualified name and by tying 'repo' to the project's repositories, adding rationale the schema's one-line descriptions do not provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (find/locate) and a specific resource (a Lean declaration) and even enumerates what an answer consists of: repository, file, line, line text, and the commit the index is at. This is clearly distinguishable from generic siblings like read_code, search_code, or code_symbols.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete operating guidance: pass the full name (e.g. 'D5.rank5_decided'), and read the file when two places answer because the file names only the last name part inside its namespace. It also names the follow-up call (set_claim with a concrete JSON payload). It does not explicitly say when to prefer this over search_code/code_symbols, so usage context 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.
find_personFind personARead-onlyInspect
Who a name in this company's texts is — «Гупта», «N. D. Gupta», «Sjogren». Ask it BEFORE writing a person's name with initials or in another script: the answer is every person the spelling may be, each with all their spellings by script ('latin', 'cyrillic') and form ('full' — with initials or a first name, 'surname', 'inflected' — a declined form), each spelling with the source it was read from and the words there, and 'checked': 'checked' (the quote stands in its source), 'unchecked' (nobody gave a source — somebody remembered it) or 'stale' (the quote stood in its source and was edited out of it, or the source is gone: the spelling may still be right, its proof is not). Write the name as found — «Гупта (N. D. Gupta)» — and never complete initials from memory. 'ambiguous' is true when more than one person is written exactly so (two Guptas): then say which one you mean, or ask. Nothing found: add what you know with set_person, with the source and quote you read it in. Matches any spelling, case aside, then spellings that begin so. Only confirmed persons, and only spellings whose source you may open. Only where the company's plan includes AI.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | A project key to look in it and its parent projects only. Leave out for every project you can read. | |
| spelling | Yes | The name as you met it, e.g. 'Гупта' or 'N. D. Gupta'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations covering read-only safety, the description adds substantial behavioral context: matching rules (any spelling, case aside, then prefix), visibility limits (only confirmed persons, only spellings whose source you may open), plan gating (only where the plan includes AI), and full semantics of the 'checked'/'unchecked'/'stale' states.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded, but the description is a long run-on that buries the checked/stale taxonomy and multiple behavioral rules in a single sprawling paragraph. The information earns its place, but structure and brevity are weak.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description fully compensates by describing the return shape: every candidate person, each spelling by script and form, each source and quote, and the checked status. An agent can interpret the result without additional documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema: the spelling must be written 'as found', never with initials completed from memory, and matching is case-insensitive exact-then-prefix. The project parameter is left to the schema, which already documents it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line states a specific verb and resource — resolve a name spelling to the person(s) — and the description distinguishes it from the write-path sibling set_person for the 'nothing found' case. It does not explicitly differentiate from close lookup siblings like distinct_persons or list_persons, so it falls short of a full 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use: 'Ask it BEFORE writing a person's name with initials or in another script', plus an explicit prohibition ('never complete initials from memory'). It also gives the alternative path when nothing is found (use set_person with source and quote) and states the ambiguous-case procedure.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_agent_usageGet agent usageARead-onlyInspect
What background-agent runs have cost an issue (local or mirrored/upstream): one record per run (tokens by kind, machine time, agent/model/host) plus the totals. A null metric means nobody reported it — which is not the same as zero, so 'reporting' says how many records carried each metric.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Issue key, e.g. 'UK-1'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuinely non-obvious semantics the annotations cannot convey: a null metric means a metric was never reported rather than being zero, and a 'reporting' count tells how many records carried each metric. That null-vs-zero warning is exactly the kind of interpretive context that prevents misreads of the payload.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the resource and its returned shape, with the null-semantics caveat placed after the main claim where it belongs. It is dense but every clause carries information. Minor deduction because the term 'reporting' is introduced in quotes as if already known, which costs the reader a beat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must carry the return shape, and it does: per-run records, the metric dimensions, totals, and the null/'reporting' semantics. With one required parameter and read-only annotations, little else is essential. It would be complete at 5 with a note on whether runs are limited to a time window or paginated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter, 'key', documented in the schema at 100% coverage with an example ('UK-1'). The description mentions 'an issue (local or mirrored/upstream)' but does not elaborate on the key format or resolve the local-vs-mirrored ambiguity for that parameter, so it adds no meaning beyond the schema. Baseline 3 applies given full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (background-agent runs costed against an issue) and enumerates the returned dimensions: one record per run with tokens by kind, machine time, agent/model/host, plus totals. That is far beyond restating the name. It stops short of a 5 because it never contrasts itself with the sibling tools report_agent_usage and delete_agent_usage, which share the same noun and are the obvious confusion points.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the phrasing 'have cost an issue' signals a read of accumulated cost data, but there is no explicit when-to-use, no prerequisite (does the issue need to exist? does data need to have been reported first?), and no pointer to report_agent_usage for writing or delete_agent_usage for cleanup. An agent can infer the context but is not routed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_attachmentGet attachmentARead-onlyInspect
Read one file attached to an issue — its bytes, base64-encoded — by the issue key and the 'filename' as get_issue lists it. The bytes travel as text through the conversation and cost roughly a third more than the file itself, so there is a size ceiling; the pm-files MCP server saves a file to a path instead, without spending the conversation on it (local_files_setup says how to connect it). Reading needs only permission to see the issue.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Issue key, e.g. 'UK-1'. | |
| filename | Yes | File name, as listed by get_issue. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/non-destructive, but the description adds substantial context beyond them: the payload is base64 text, it inflates token cost by roughly a third, there is a size ceiling, and the file bytes are transmitted into the conversation. That cost and ceiling disclosure is exactly what an agent needs before calling a read tool that can flood context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the verb, resource and return format in the first clause, then layers cost, alternative, and permissions. Each sentence carries information, though the parenthetical about local_files_setup slightly lengthens an already dense block.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still covers what comes back (base64 bytes), the practical consequence (context cost, size ceiling), an escape hatch for large files, and the authorization model. Nothing an agent needs to call this safely is missing, aside from a precise ceiling value.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents both parameters, including 'as listed by get_issue'. The description reinforces the workflow dependency (filename must match what get_issue lists) but adds no syntax or format detail beyond that, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read one file attached to an issue') and even specifies the return encoding ('its bytes, base64-encoded'), which lets an agent distinguish this from mutation tools like add_attachment. It does not explicitly differentiate from the get_wiki_attachment sibling, so the scope boundary with wiki files is only inferable from the word 'issue'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names an alternative (the pm-files MCP server, reachable via local_files_setup) and the condition that selects it: large files, because bytes in the conversation cost a third more. It also states the access prerequisite ('only permission to see the issue'), so an agent knows when this tool is appropriate and when it is not.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_changeGet changeARead-onlyInspect
The files one merge request, pull request or commit touches, with their diffs. Large diffs arrive cut.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | No | Which repository, as 'group/repo'. Omit when only one is open. | |
| change | Yes | The merge request or pull request number ('!12', '#12' or '12'), or a commit's hash. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and destructiveHint=false. The description adds meaningful context beyond annotations by warning that large diffs are truncated ('arrive cut'), which affects what the agent should expect from results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: the core purpose is front-loaded and the truncation caveat follows immediately. Every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only two-parameter tool, it communicates the return content and the important truncation behavior. Because there is no output schema, some response-shape detail is absent, but the essential context is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already explains the optional repo parameter and accepted change formats. The description does not add syntax, format, or semantic detail beyond what the schema provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource (files touched by one merge request, pull request, or commit) and the returned content (diffs). It is clear, but it lacks an explicit verb and does not distinguish itself from nearby code-reading siblings such as read_code or search_code.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'one merge request, pull request or commit' implies the scope, but there is no explicit guidance on when to choose this tool over read_code, search_code, or issue-related tools. No exclusions or alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_chat_agent_policyGet chat agent policyARead-onlyInspect
Which of this company's agents may be in its chats (PM-1247): 'mode' is 'all' (the default), 'none', or 'chosen' — then only the agents in 'roles'. An agent already in a chat that the choice bars stays there and answers nobody. 'mayChange' says whether you may change it — the company's owner only, with set_chat_agent_policy.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Read-only/non-destructive safety is already covered by annotations, so the description adds only the policy semantic that an agent already seated in a chat stays and answers nobody — useful edge-case context. It does not describe the response envelope, error behavior, or cost. The added value is real but limited once annotations carry the safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening question-format statement is front-loaded, but the remainder is a single dense run-on packing three field semantics, an edge case, and a permission rule into one sentence. It is efficient in length but poorly structured, making it harder to parse than separate labeled statements would be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read tool with no output schema and annotation-covered safety, the description supplies the essential return-value semantics (mode, roles, mayChange) and the setter alternative, which is what an agent most needs. It stops short of return structure or failure modes but is adequate for a 0-param getter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters, the baseline is 4, and the description goes further by explaining the meaning of the values the tool returns (mode defaults to 'all'; 'chosen' scopes to roles). That reframes 0-param semantics toward output meaning, which is beneficial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description conveys the resource and scope precisely — the policy controlling which company agents may participate in its chats — by enumerating the fields it yields (mode, roles, mayChange). It is not a tautology of the title and names the setter sibling set_chat_agent_policy, so it is distinguishable. However, the getter verb is never stated explicitly; the purpose is reconstructed from the field inventory rather than declared.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It points to set_chat_agent_policy for mutation and notes mayChange reflects whether the company owner may alter it, which implicitly frames this tool's read role and a permission precondition. But there is no explicit 'use this tool when…' statement, no when-not guidance, and no suggestion to read mayChange before attempting a change — the routing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_chat_keepingGet chat keepingARead-onlyInspect
How long this company's chats are kept: 'days' is 30, 90 or 365, or null for as long as the company is (the default). Older messages are erased with their files within the hour. 'mayChange' says whether you may change it — the company's owner only, with set_chat_keeping.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuine domain behavior the annotations cannot: that erased messages and their files disappear within the hour, and that null is the default meaning 'as long as the company is'. It stops short of describing response format or whether both fields are always present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first clause front-loads what is measured, and each following clause (legal values, erasure timing, mutability) is load-bearing. The quoted-key style and em-dashes make it slightly dense to parse, but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters and no output schema, the description carries the entire explanatory burden and does so: it defines both returned fields, the default, the allowed values, and the deletion consequence. An agent can report the retention setting to a user from the description alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero input parameters, so there is nothing for the description to disambiguate. It does spend its words explaining the returned fields ('days' and 'mayChange'), which is a useful substitute given no output schema exists.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource and its exact semantics: chat retention, with the three legal 'days' values (30/90/365) plus null meaning indefinite. It also names the sibling that mutates this state, so the tool is distinguishable from set_chat_keeping without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It routes the mutation case explicitly: 'the company's owner only, with set_chat_keeping', which tells the agent when this read tool is insufficient and which sibling to use instead. It doesn't spell out read-side preconditions, but that is minor for a no-arg getter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_chat_messagesGet chat messagesARead-onlyInspect
A chat's messages, oldest first in the page, by cursor: the newest page by default; 'before' a message id reads further back, 'after' one reads forward (what came since). 'more' says the page stopped short — pass the first message's id as 'before' for the page before it. Each message: author (absent when an agent wrote it — then 'agent' names the role and whom it answered), Markdown body (absent once deleted, with 'deleted' true), 'replyTo', files by address, 'issues' made of it that you may open. Reading here does not mark the chat read — mark_chat_read does. 'working' lists the agents answering in it now. A secret chat ('secret' true) is end to end: its words open on its people's devices only, so here every message has an empty body — who wrote when, and nothing of what; it cannot be written to from here either.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Read the messages after this id, going forward. Wins over 'before'. | |
| limit | No | How many, 1–100. Default 50. | |
| before | No | Read the messages before this id, going back. | |
| chatId | Yes | The chat's id, as list_chats gives it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the readOnly annotation to disclose non-obvious traits: reading does not mark the chat read, deleted messages have no body, agent-authored messages omit author, and secret chats return empty bodies and cannot be written to. These are exactly the surprises an agent must know.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense paragraph with paging logic front-loaded, and every sentence carries new information. It is on the long side with stacked parentheticals, which costs a little readability but not substance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full burden and delivers: it enumerates the message fields (author/agent, body, deleted, replyTo, files, issues) and the 'working' list, so an agent knows what it will get back.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3; the description adds operational meaning by explaining the before/after cursor idiom and the feedback loop via 'more', which goes beyond the terse schema strings. The 'limit' parameter is left to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('A chat's messages') plus the ordering and cursor scope, so an agent immediately knows this is the message-reading tool for a single chat, distinct from list_chats or send_chat_message.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains how to page ('before' reads back, 'after' reads forward, 'more' means pass the first message's id) and names mark_chat_read as the tool that actually marks a chat read. It lacks explicit when-not-to-use conditions, but the operational context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_checklistGet checklistARead-onlyInspect
Read an issue's checklist — the '- [ ]' lines of its description — as items, in order: each with a stable 'id' (pass it to check_checklist_item), 'checked', its words ('text', without reminder or picture), its 'depth' when nested, its 'reminder' ('YYYY-MM-DD HH:MM' or null) and its 'picture' — the attachment it shows of how the item should look, with the 'content' address its bytes are read at with this same token, or null — and its 'request' when the item asks somebody for a document (a 📎 in its line): 'state' (waiting, overdue past its 'due' day, sent with a file not yet ticked, done once ticked) and the 'files' sent to it, or null for an item that asks for nothing. Needs only permission to see the issue.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Issue key, e.g. 'UK-1'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish a safe read (readOnlyHint true, destructiveHint false). The description adds useful behavioral context beyond that: the permission needed ('only permission to see the issue') and the null/absent behavior for reminder, picture, and request. It does not discuss error cases, but it adds substantial context for a read tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is front-loaded and contains no filler; every clause either defines an output field or states a permission constraint. The first sentence is a dense run-on with nested em dashes and parentheses, which weakens structure, but the length is justified by the complex return shape.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must document the return shape, and it does: id, checked, text, depth, reminder, picture, request state, files, and null cases. It also states the permission boundary, leaving no major gap needed to invoke or interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is only one parameter, 'key', and the schema fully documents it with an example ('UK-1'). The description adds no extra detail about key syntax, scoping, or lookup behavior, so the baseline of 3 is appropriate when the schema carries the parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Starts with a specific verb and resource ('Read an issue's checklist') and defines exactly which description lines are parsed into items. It clearly separates the checklist view from the raw issue description and explains that returned ids feed check_checklist_item.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The read-before-check workflow is implied by the note that each id is passed to check_checklist_item. However, the description never explicitly says when to use this instead of get_issue, search_issues, or other sibling tools, and it gives no when-not conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_claimGet claimARead-onlyInspect
One claim of a project (see list_claims), with its journal: every change of its status — from what, to what, who and on what ground — newest first, and when it was created and edited; 'restingOn' names the issues whose link column rests on it (a requirement of the register), and counts those you may not open. Name it by 'id', or by 'project' and 'label'. Anybody who sees the project.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | The claim's id, as list_claims returned it. | |
| label | No | The claim's label, e.g. 'thm:d5-rank5', with 'project'. | |
| project | No | The project key, with 'label'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, non-destructive, closed-world), and the description adds real behavioral context beyond them: the journal is ordered newest-first, includes from/to status, actor and ground, plus created/edited timestamps. It also discloses that 'restingOn' lists dependent issues and merely counts ones the caller may not open — a permission-driven partial-visibility behavior worth knowing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence that starts with the resource and then layers the return-shape detail. The em-dash and parenthetical stack makes it harder to scan than it needs to be, but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description correctly spends its budget describing the returned object (journal entries, timestamps, restingOn). The remaining gap is behavior with no identifier supplied — all three parameters are optional, so an agent has no idea what a parameterless call does.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are documented in the schema itself. The description restates the same id-or-(project+label) convention without adding format, precedence, or error semantics beyond it — baseline 3 for a fully documented schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description makes clear this returns a single claim plus its status-change journal, and explicitly distinguishes itself from the listing sibling (see list_claims). The retrieval verb is only implicit ("One claim of a project"), and the sentence is dense with parenthetical detail, but an agent can tell what it gets back versus list_claims.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It routes the agent to list_claims for enumeration and spells out the two valid identification modes ('id', or 'project' plus 'label'), plus the access precondition ('Anybody who sees the project'). It stops short of explicit when-not guidance, e.g. what happens if none of the identifier parameters are supplied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_commentsGet commentsARead-onlyInspect
Read the discussion on an issue, oldest first. Without 'startAt' you get the END of the thread — the most recent 'limit' comments — because catching up means reading the latest, not the first ever written; 'earlier' says how many stand before the page you got, and 'startAt' walks back through them. Each 'body' comes back exactly as written, which is also the text update_comment's 'edits' are matched against. A reply carries 'replyTo', the id of the comment it answers (null otherwise) — pass the same id to add_comment's 'replyTo' to answer one. Comments that were deleted are not listed. Needs only permission to see the issue.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Issue key, e.g. 'UK-1'. | |
| limit | No | How many comments to return (default 20, max 100). | |
| startAt | No | Where to start, counted from the OLDEST comment as 0. Omit for the most recent page; pass 'startAt' - 'limit' from a previous answer to step back one page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the read-only annotations: discloses the surprising default ordering (end of thread), how pagination via 'earlier' works, that deleted comments are excluded, that bodies are returned verbatim, and the minimum permission needed. These are exactly the traits an agent cannot infer from annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then the ordering caveat, then cross-tool linkages. Dense but mostly earns its space; the clause about update_comment's 'edits' is a little awkwardly phrased but still carries useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by describing the relevant returned fields ('body', 'replyTo', 'earlier') and the exclusion of deleted comments. Combined with permissions and pagination behavior, an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds interpretive value by explaining 'earlier' (an output field absent from the schema) and framing startAt/limit as page-walking rather than raw offsets, though it largely restates the schema's description of 'startAt'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read the discussion on an issue') and immediately pins down ordering and scope. The relationship to sibling tools update_comment and add_comment is named, so an agent can place it in the workflow without opening other schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the key decision — omitting 'startAt' retrieves the most recent page, passing it walks backward — and explicitly ties the returned ids to add_comment's 'replyTo' and update_comment's 'edits'. It does not explicitly exclude alternatives such as get_linked_jira_comments, 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.
get_issueGet issueARead-onlyInspect
Get one issue by key (e.g. 'UK-1') if it is visible to this token, including its description, status, assignee, labels, sub-tasks, the issues it is linked to and the wiki pages linked to it. 'comments' is a COUNT, not the text — read the thread itself with get_comments whenever it is not zero: decisions, the map of what is attached and how to run the thing are often written there rather than in the description.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Issue key, e.g. 'UK-1'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already state that this is a safe read-only operation, and the description adds meaningful context beyond them: token-based visibility and the fact that 'comments' is only a count. The guidance to read the thread via get_comments explains an important behavioral nuance that would otherwise cause misuse.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary action and then the important comments caveat. Every sentence adds useful information with no repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only retrieval tool with no output schema, it covers the visibility condition, the returned issue fields, and the key comments distinction. An agent has enough information to invoke this tool correctly and know when to follow up with get_comments.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter is fully documented in the schema, so baseline credit applies. The description repeats the example key format but does not add syntax or constraints beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get one issue by key'. The singular key and mention of visibility distinguish it from search/list siblings such as find_issues and search_issues 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly says when to use this tool: retrieving one issue by key when visible to the token. It also names the alternative get_comments and gives an explicit condition for using it whenever the comments count is nonzero.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_jira_connectionGet Jira connectionARead-onlyInspect
Which Jira of its own a project is connected to: the site, the account whose token it uses (what a write there is signed as), whether a token is held ('secretSet' — the token itself never comes back) and whether the connection is switched on; and under 'confluence', whether the same site's Confluence is read too, whose account answered there, and whether it has a token of its own ('ownToken') rather than the Jira one. 'connected' false means none. 'canConfigure' says whether you may change it: connecting, or giving a new token, is done on the board's Jira sheet at 'url', since the token is a secret that is never typed in this chat; switching it on or off is set_jira_connection. Any member of the project may ask.
| Name | Required | Description | Default |
|---|---|---|---|
| projectKey | Yes | Project key, e.g. 'PM'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a safe read operation, and the description adds important behavior: the token itself is never returned, 'secretSet' indicates token presence, 'connected' false means none, and 'canConfigure' indicates permission to change the connection. It does not discuss error cases or rate limits, but the security-sensitive and permission-relevant behavior is well disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content is dense but front-loaded around the returned connection fields, and every clause carries useful information about return values, routing, or permissions. The first sentence is quite long and could be easier to scan, but there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully carries the burden of explaining the return shape: site, account, token flags, enabled state, Confluence sub-fields, 'connected', 'canConfigure', and the configuration URL. It is complete enough for an agent to understand what this read returns and what it cannot do.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The sole parameter 'projectKey' has 100% schema description coverage with an example, so the schema carries the parameter documentation. The description does not add further meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly conveys that this tool reports a project's Jira connection state, including the site, account, token presence, enablement, and Confluence linkage. It distinguishes itself from set_jira_connection for switching on/off, though the opening is phrased as a noun clause rather than a direct verb+resource statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly routes mutation to set_jira_connection and connection/token setup to the board's Jira sheet at 'url', preventing misuse of this read-only tool for writes or secret entry. It also notes that any project member may ask, but does not state a direct trigger condition such as 'use before attempting a Jira write'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_jira_linkGet Jira linkARead-onlyInspect
Which issue of the project's own Jira this issue is, and what that Jira says of it now — its summary, status, assignee and link — read with the token the project's administrator connected. 'connected' false means the project has no Jira; 'jira.state' is 'found', 'missing' (no such issue, or one the token cannot see), 'refused' (the token no longer opens the site), 'unreachable', 'off' or 'sealed'. Where the project keeps its statuses in step with that Jira (get_jira_sync), 'sync' says which way and, in 'problem', why the two were left apart: 'conflict' (both moved), 'no_pair_here' / 'no_pair_there' (a status with no pair), 'refused_here' (this project's workflow refused the move), 'no_move' (the site lists no move to the paired status), 'refused_there', 'missing', 'token'. Set the link with set_jira_link.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Issue key here, e.g. 'PM-12'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only and non-destructive, but the description adds substantial behavioral context: reads use the administrator-connected token, connected=false means no Jira, and it enumerates meanings for jira.state values and sync problem values. This is especially useful because there is no output schema to explain those return fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose and then supplies the necessary state meanings, but it is a dense, run-on paragraph with many semicolon-separated enumerations. It avoids redundancy, though a slightly clearer structure would improve scanability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full burden of explaining return values, and it does so thoroughly: connected status, jira.state meanings, summary/status/assignee/link, and sync problem reasons. It gives an agent enough context to interpret likely outcomes without opening other references.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The sole parameter has 100% schema coverage with an example ('PM-12'), so the schema already explains the key format. The description implies the key identifies the local issue whose Jira link is being read, but adds no further parameter semantics beyond that implication.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it reads which Jira issue an issue is linked to and what that Jira currently reports (summary, status, assignee, link). It distinguishes the read operation from mutation by naming set_jira_link, and it explains the related sync state via get_jira_sync.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly implies this is the read-side tool for the project's Jira link and explicitly says to use set_jira_link for setting the link. It references get_jira_sync for the status synchronization context, but does not spell out explicit exclusions or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_jira_syncGet Jira syncARead-onlyInspect
How a project keeps its issues' statuses in step with its own Jira (see get_jira_link): 'direction' — 'off', 'both', 'from_jira' (Jira moves, the issue here follows) or 'to_jira' (the issue here moves, Jira follows); 'pairs' — which status here is which there, in order; 'actsFor' — the person whose name a move made here carries, and 'ownerStands' false when they can no longer be acted for (the sync then waits until somebody saves it again); 'webhook' — whether the site's webhook is set up and when it was last heard (the address itself is only shown on the screen); 'statuses' here and 'jiraStatuses' there to pair; and the issues left with their statuses apart, with why ('conflict', 'no_pair_here', 'no_pair_there', 'refused_here', 'no_move', 'refused_there', 'missing', 'token'). For whoever administers the project.
| Name | Required | Description | Default |
|---|---|---|---|
| projectKey | Yes | Project key, e.g. 'PM'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a safe read-only operation, but the description adds substantial non-obvious context about the returned sync configuration. It explains direction modes, ownerStands behavior when someone can no longer be acted for, webhook status, and the conflict reasons for issues whose statuses are out of step.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but largely earns its length because no output schema exists and it must define the returned fields. It is somewhat run-on, with many semicolon-separated field definitions, but it is front-loaded with the core concept and avoids unrelated filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema, the description supplies the key return-field semantics an agent needs: direction modes, status pairs, actsFor and ownerStands behavior, webhook status, and unresolved issue reasons. Together with the fully described projectKey parameter and read-only annotations, this is complete enough 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single projectKey parameter is fully described in the schema, including an example value, so the schema carries parameter documentation. The description refers to 'a project' and project administrators but adds no further parameter meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explains that the tool exposes how a project keeps issue statuses in step with Jira, and it enumerates the sync fields returned. It distinguishes itself somewhat by pointing to get_jira_link, but it never states the retrieval action as directly as it could.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only usage context is the audience note 'For whoever administers the project.' It does not explain when to call this instead of related tools such as get_jira_link, get_jira_connection, or set_jira_sync.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_legal_documentGet legal documentARead-onlyInspect
A legal act that issues or wiki pages you can read refer to, as it is kept here: title, publisher, 'state' (fresh, stale, waiting — named and not read yet, or unreachable), 'asOf' — the day its text is as of, how many issues and pages refer to it ('references': total, and 'hidden' of them where you may not read), its articles with their offsets ('outline', on the first look) and a window of its text, at most 12000 characters. 'changedAt' is when its words were last found changed on the publisher's site, 'editions' the earlier texts kept (from, to — the days the site was asked, not the days the act was amended — and the headings each change was under), 'failing' a site that has stopped giving it. Pass 'find' («Article 18») to land on a place, or 'offset' to read on from 'nextOffset'. Reads no site: the text is the one already read. Name the act by the document id a reference gives, by its address, or by its key (e.g. 32015L0849); an act nothing you can read refers to is not found.
| Name | Required | Description | Default |
|---|---|---|---|
| find | No | Words to land on, e.g. 'Article 18'. | |
| offset | No | Where to read from: a previous answer's nextOffset, or an outline entry's offset. | |
| document | Yes | The act: a document id, its address, or its key (e.g. '32015L0849'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/false-destructive/non-open-world, and the description adds real context beyond that: it reads no site so no fetch occurs, text is capped at 12000 characters, references may be 'hidden' where unreadable, and 'failing' marks dead sites. This meaningfully reduces misinterpretation of a read-only retrieval.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content is dense and information-rich, but it is delivered as one long run-on sentence with a muddled opening clause, making it hard to parse. It is not padded, but structure and front-loading suffer.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-shape burden and does so well, enumerating title, publisher, state, asOf, references, outline, text window, changedAt, editions, and failing. The main gap is absence of guidance on alternatives/siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, and the description adds value by illustrating 'find' («Article 18»), explaining 'offset' accepts a prior nextOffset or an outline entry's offset, and enumerating accepted document identifier forms. It complements rather than repeats the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description makes clear this retrieves a legal act by document id, address, or key and returns its text/metadata. The opening clause is garbled ('A legal act that issues or wiki pages you can read refer to'), but the intent — get a stored legal document — is recoverable. It does not distinguish itself from siblings like find_by_legal_document or search_legal_library.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains the usage of 'find' (land on a place) and 'offset' (read on from nextOffset), and clarifies it reads no site. But it gives no guidance on when to choose this over find_by_legal_document, search_legal_library, or list_legal_references, 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.
get_linked_confluence_pageGet linked Confluence pageARead-onlyInspect
Read one page of the Confluence of a project's own Jira site — switched on beside the Jira (get_jira_connection's 'confluence') — on the project's token, as the agents read it: its title, space, the pages above it, its version and who changed it last, and its body as Markdown (cut at 12000 characters, which it says). A page there is 'confluence_page_id', with its 'confluence_url'; it is not a page of this tracker's wiki (get_wiki_page). What it says was written by people on that site. Name the project by 'project', or an issue here by 'issue'. For the people who work in the project; at most 10 reads of the linked site a minute per person, Jira and Confluence together. A refusal has a 'state': not_connected (with the 'url' of the screen that connects one), off, missing, refused, unreachable, busy, sealed, no_access, bad_request.
| Name | Required | Description | Default |
|---|---|---|---|
| page | Yes | The page there: its id, e.g. '123456', or its link. | |
| issue | No | An issue here, e.g. 'PM-12', whose project's site is read. | |
| project | No | Project key here, e.g. 'PM'. Or give 'issue'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Far exceeds the annotation bar: it discloses the auth model ('on the project's token', read 'as the agents read it'), a concrete rate limit (at most 10 reads/min per person, Jira and Confluence combined), a truncation rule (body cut at 12000 chars and it says so), and a full enumeration of refusal 'state' values including not_connected with a connecting url. These are exactly the behaviors an agent needs before invoking an open-world read.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded and every sentence carries information (scope, token, return shape, truncation, rate limit, refusal states). The em-dash-chained phrasing makes it dense and slightly hard to parse for an LLM, but nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description fully specifies the return payload (title, space, ancestor pages, version, last editor, Markdown body) and the failure surface via 'state'. Given three simple params and open-world read annotations, nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description adds real meaning by naming the page argument as 'confluence_page_id' alongside its 'confluence_url' and clarifying the project/issue alternative route. It stops short of saying whether both project and issue can be supplied together or which wins.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read one page of the Confluence of a project's own Jira site') and immediately disambiguates from the near-identical sibling: it is not a page of this tracker's wiki (get_wiki_page). An agent can pick it apart from get_wiki_page and get_linked_jira_issue without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit selection context: name the project by 'project' or an issue here by 'issue', and states the negative case against get_wiki_page. However it never names search_linked_confluence as the way to find a page when you only have a query rather than an id, which is the most likely mis-invocation path among all these siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_linked_jira_commentsGet linked Jira commentsARead-onlyInspect
Read the comments of one issue of a project's own Jira (see get_linked_jira_issue), the newest first: who wrote each, when and what, and how many there are in all. Name the project by 'project', or an issue here by 'issue' — then its project's Jira is read, and the issue's own key there is the default. For the people who work in the project; at most 10 reads of the linked Jira a minute per person.
| Name | Required | Description | Default |
|---|---|---|---|
| issue | No | An issue here, e.g. 'PM-12': its project's Jira is read, and its own key there unless 'jiraKey' says otherwise. | |
| limit | No | How many of the latest, at most 30. Default 10. | |
| jiraKey | No | The issue there: 'ACME-123' or its /browse/ link. Optional when 'issue' has a key there. | |
| project | No | Project key here, e.g. 'PM'. Or give 'issue'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnlyHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description still adds real behavior: results are ordered newest first, each comment carries author/timestamp/body plus a total count, and there is a rate limit of 10 linked-Jira reads per minute per person. That rate-limit disclosure is valuable and not derivable from structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the verb and the returned fields, then targeting rules, then access and rate context — no filler. The phrasing is slightly dense ('who wrote each, when and what') but each clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully explains what comes back (author, time, body, total count) and adds ordering, access scope for project members, and rate limits. It does not mention pagination or what happens when the issue has no linked Jira counterpart, which are the remaining gaps for a read tool of this shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (issue, limit, jiraKey, project) are already documented in the schema, which sets the baseline at 3. The description adds the fallback relationship between 'project' and 'issue' that the schema only gestures at, but it never mentions 'limit' or its max of 30, so it does not meaningfully exceed what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: read the comments of one issue in a project's linked Jira, newest first. It points to the related sibling get_linked_jira_issue for the issue itself, so an agent can tell this apart from the issue-fetch tool. It does not distinguish itself from the local-comment sibling get_comments or from search_linked_jira, which keeps it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied rather than stated: naming the project via 'project' or via an issue here, with the issue's own Jira key as the default, tells the agent how to target the call. There is no explicit 'use this instead of X when Y' guidance versus get_comments or search_linked_jira, and no statement of when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_linked_jira_issueGet linked Jira issueARead-onlyInspect
Read one issue of a project's own Jira — the one its administrator connected (get_jira_connection) — on the project's token, as the issue screen and the agents read it: summary, type, status, priority, assignee, reporter, dates, labels, versions, parent, sub-tasks, links there and the description (cut at 12000 characters, which it says). An issue there is 'jira_key', with its 'jira_url'; it is not an issue of this tracker (get_issue). What it says was written by people on that site. Name the project by 'project', or an issue here by 'issue' — then its project's Jira is read, and the issue's own key there is the default. For the people who work in the project; at most 10 reads of the linked Jira a minute per person. A refusal has a 'state': not_connected (with the 'url' of the screen that connects one), missing, refused, unreachable, busy, off, sealed, no_access, bad_request.
| Name | Required | Description | Default |
|---|---|---|---|
| issue | No | An issue here, e.g. 'PM-12': its project's Jira is read, and its own key there unless 'jiraKey' says otherwise. | |
| jiraKey | No | The issue there: 'ACME-123' or its /browse/ link. Optional when 'issue' has a key there. | |
| project | No | Project key here, e.g. 'PM'. Or give 'issue'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover read-only/open-world safety, and the description adds substantial behavior beyond them: the 12000-character description truncation, a per-person rate limit of 10 linked-Jira reads/minute, the trust framing ("written by people on that site"), and an enumerated set of refusal states including not_connected with the connecting 'url'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and dense with useful detail; nearly every clause carries information (truncation, rate limit, error states). Some phrasing is idiosyncratic and roundabout ("What it says was written by people on that site"), which slows reading slightly, but nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates by enumerating the returned fields (summary, type, status, priority, assignee, reporter, dates, labels, versions, parent, sub-tasks, links, description) plus the full failure taxonomy. An agent has everything needed to call it and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds precedence semantics the schema only hints at: 'issue' resolves the project and supplies the default Jira key unless another key is given. That conflict-resolution rule is genuinely useful invocation guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (read one issue of the project's own linked Jira) and explicitly contrasts it with a sibling: "it is not an issue of this tracker (get_issue)". It also names the connection tool (get_jira_connection) that establishes the resource, so an agent can place it precisely among the Jira siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear selection rules: name 'project' for a project's Jira, or 'issue' for a local issue whose Jira key becomes the default, and clarifies the audience ("for the people who work in the project"). It does not, however, steer an agent to search_linked_jira vs. this tool or to get_linked_jira_comments for comment retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_project_rule_runsGet project rule runsARead-onlyInspect
A project rule's journal, newest first: each time an issue entered the rule's state and matched its conditions — which issue, who moved it, and the outcome: 'applied' (checklist added), 'alreadyThere' (its marker line was already in the description, nothing added) or 'tooLong' (the description would have been too long, nothing added); for a duty, 'handed' (the issue went to its agent), 'busy' (an agent already had it), 'tooMany' (the duty's fifty a day were used up) or 'refused' with a 'reason' (agent_off, agent_budget, …), and 'ownerLost' when the duty was switched off because its owner lost the project. The place to look when a checklist did not appear or an agent did not take an issue. Any member may read it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The rule's id, from list_project_rules. | |
| limit | No | How many lines, newest first (default 20, max 100). | |
| projectKey | Yes | Project key, e.g. 'ONB'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Although annotations already declare readOnlyHint=true and destructiveHint=false, the description adds substantial behavioral context: newest-first ordering, detailed outcome semantics for checklist and duty rules, and read-access scope ('Any member may read it'). This is far beyond what the annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with the resource and ordering, then efficiently enumerates only the outcome details needed to interpret results. Despite being dense, every clause earns its place by explaining a distinct outcome state.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully explains the return content, including all outcome values and their meanings. It also states access permissions, making the definition complete for an agent 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all parameters (projectKey, id, limit) are fully documented in the schema. The description does not add parameter-specific guidance beyond what the schema already provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the specific resource ('A project rule's journal') and its ordering ('newest first'), and explains exactly what each entry represents. It is clearly distinguishable from list_project_rules and update_project_rule.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear diagnostic use case ('The place to look when a checklist did not appear or an agent did not take an issue'), which tells an agent when this tool is relevant. It does not explicitly name alternatives or when-not-to-use cases, but the context is strong enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_secret_file_journalGet secret file journalARead-onlyInspect
What was done to one secret file, newest first — uploaded, downloaded, a reader added, waiting for a key or taken off, its key changed — by whom, with which token and through which door (ui, api, mcp). Only for the file's managers: its author, the project's lead or a company administrator who reads it. Take the id from list_secret_files.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Secret file id, from list_secret_files. | |
| limit | No | How many lines, newest first. Default 100, at most 500. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, non-destructive, closed-world), and the description adds genuinely new context: ordering is newest-first, each entry records actor, token, and channel (ui/api/mcp), and calls are permission-gated. It omits deeper behavior such as whether the journal is complete or truncated by retention, which keeps it off a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with what the tool answers, then permissions, then the id source. The long enumerated clause is dense but every listed event type carries information. Slightly heavy for the amount of routing decision it supports.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully sketches the return content (events, actor, token, channel) and ordering, which compensates well for a tool whose result shape would otherwise be unknown. It stops short of describing page size behavior or what an empty journal means.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both id and limit (default 100, max 500, newest first) are already fully documented. The description only repeats the newest-first ordering and the list_secret_files provenance for id, adding no syntax or format detail beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (the journal of one secret file) and enumerates the record types it contains — uploads, downloads, reader changes, key changes — so the agent knows exactly what it returns. It is clearly distinguished from the sibling list_secret_files, which is named only as a source of ids.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit prerequisite (get the id from list_secret_files) and an explicit access restriction (only the file's author, project lead, or company admin may read it). It does not name an alternative audit tool or say when not to call it, so it falls short of the top tier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sourceGet sourceARead-onlyInspect
One source of a project (see list_sources), with its journal: every change of how far it is checked — from what, to what, who and why — newest first, and when it was created and edited. Name it by 'id', or by 'project' and 'source' — its key, or any identifier it has in any shape: 'arXiv:2301.01234', a DOI or its https://doi.org/ address, 'MR1234567', 'Zbl 1234.56789', an ISBN. Anybody who sees the project.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | The source's id, as list_sources returned it. | |
| source | No | Its key ('IMP26') or an identifier it has, with 'project'. | |
| project | No | The project key, with 'source'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a safe read, but the description adds substantive context the annotations cannot: the response includes the check-progress journal (from what, to what, who, why), ordered newest first, plus creation and edit timestamps, and it discloses the permission model. That is meaningful behavioral disclosure beyond the hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and the list_sources alternative are front-loaded, then return contents, then addressing forms. It is dense with em-dashes and long clauses, so it is efficient but slightly run-on rather than crisp.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing the return value, and it does so concretely (journal entries with before/after, actor, reason, ordering, created/edited stamps). Combined with the access rule and identifier formats, an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 more by enumerating the identifier shapes accepted by 'source' — arXiv IDs, DOI strings and doi.org URLs, MR numbers, Zbl numbers, ISBNs — which the schema only gestures at with 'an identifier it has'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource — retrieve one source of a project together with its journal — and explicitly points to the sibling list_sources for the collection case. An agent can distinguish this from list_sources and set_source/delete_source without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes enumeration to list_sources and states the access condition ('Anybody who sees the project'), which is real guidance for whether the call will succeed. It stops short of naming when to prefer this over set_source or delete_source, so usage is clear but not fully delimited.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_startedGet startedARead-onlyInspect
What this company and one of its projects could still set up in the tracker, and what is set up already — call it when the person has just started or asks what else the tracker can do. Each step has 'id', 'scope' ('company' or 'project'), 'done', 'why' (one sentence) and 'how': the next move, either an MCP 'tool' with example 'args' to call, or a 'url' of the screen to open when the step needs a token, a key or a browser — never ask for such a secret in the chat. Steps not yet done come first. Only steps the caller may take are listed: the ones that need the project's lead or the company's owner or an admin are counted in 'hidden', with a 'note' to ask them. Without 'project', the only project the caller can see is used; with several, 'projects' lists them and only the company's steps are answered.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | The project's key, e.g. 'PM'. Optional when the caller can see only one project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so safety is covered; the description goes much further by disclosing the returned step shape, that undone steps come first, that steps requiring higher privileges are collapsed into 'hidden' with a 'note', and the explicit rule never to request tokens or keys in chat. This is substantive behavioral context an agent cannot infer from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with the purpose and then the return shape, and every clause carries information. It is a single dense paragraph with nested parentheticals, which makes it harder to scan than a short bulleted statement, but nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the full burden of explaining the response, and it does: field names, meaning of each field, ordering, permission-based filtering, and the fallback behaviour for the single optional parameter. An agent has everything needed to call it and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the parameter itself is documented; the description nevertheless adds real semantics beyond the schema by explaining what happens when 'project' is omitted and when several projects are visible ('projects' lists them and only company-level steps are answered). That resolves ambiguity the schema's one-line description leaves open.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource ('what this company and one of its projects could still set up in the tracker, and what is set up already') and states the scenario that identifies it ('just started'). It is clearly distinct from the sibling set, where the nearest neighbours like product_help or list_projects do different jobs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger: 'call it when the person has just started or asks what else the tracker can do'. It does not name a when-not condition or point to an alternative sibling (e.g. product_help) for non-onboarding questions, 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.
get_support_letterGet support letterARead-onlyInspect
Read one letter to the support address whole — the quoted thread and the signature that the request's comment leaves out, the HTML part as text, and the headers. 'letterId' comes from list_support_letters or from get_support_request's messages. A letter in a request is readable by whoever can read that issue; any other only by the support project's full members.
| Name | Required | Description | Default |
|---|---|---|---|
| letterId | Yes | The letter's id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/closed-world/non-destructive, and the description still adds real value: it discloses the access-control model (readable by issue readers for in-request letters, otherwise only support project full members) and what the returned body actually contains. That is behavior an agent cannot infer 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and the returned content, followed by id provenance and permissions. The first clause ('Read one letter to the support address whole') is slightly compressed/awkward but nothing is wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing the return shape and does so (quoted thread, signature, HTML part as text, headers), plus the authorization rule needed to call it successfully. Nothing material is missing for a one-param read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single integer param, so the baseline is 3. The description goes one step further by naming the two tools that produce a valid letterId, adding provenance guidance the schema does not provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read one letter to the support address') and immediately enumerates the payload: quoted thread, signature, HTML-as-text, headers. This clearly differentiates it from the list_support_letters sibling and from get_support_request, so an agent can pick it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says where 'letterId' comes from (list_support_letters or get_support_request's messages), which routes the agent to the right predecessor call. It stops short of an explicit when-not statement, but the permission rules make the eligibility boundary clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_support_requestGet support requestARead-onlyInspect
Read who is behind a support request: the requester's name and email, whether they asked signed in (and from which workspace), their client version, what the product knew when they asked from inside it ('context': the screen, the client, the last refusal the server gave them with its request id), and which comments of the issue the requester can see ('messages', by comment id and direction; 'autoRule' names the rule when the desk's automatic answer wrote it rather than a person, 'autoWording' says whether the model worded it or the template went). Every other comment on the issue is internal — the requester never sees it. Answers found=false for an issue that is not a support request.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Issue key of the request, e.g. 'SUPPORT-12'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
It provides extensive context far beyond the `readOnlyHint: true` annotation, detailing the data model. It explains complex behaviors like how 'messages' are filtered (internal vs. requester-visible) and the specific meaning of `autoRule` and `autoWording` flags.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is excessively long. It functions as a complete data dictionary for the response object, which is too much detail for the standard description field, sacrificing conciseness for exhaustiveness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there is no output schema, this description is 100% complete, as it exhaustively defines all the fields and behaviors of the data the agent expects to retrieve, which is the most critical information here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema only defines the 'key' parameter. Since schema description coverage is 100%, the baseline is a 3, and the description provides no additional semantic guidance on the 'key' parameter itself.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the purpose: 'Read who is behind a support request'. While it doesn't name a specific sibling, the combination of 'get' and 'support request' makes the intent unambiguous within a ticketing system context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by detailing exactly what specific data points are returned (e.g., requester name, autoRule flags, internal vs. visible comments), suggesting it is the correct tool for retrieving rich, internal support request data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wiki_attachmentGet wiki attachmentARead-onlyInspect
Read one file attached to a wiki page — its bytes, base64-encoded — identifying the page by 'pageId' or by 'spaceKey' + 'title' and the file by 'filename' as get_wiki_page lists it. This is how a file is copied from one page to another: read it here, write it with add_wiki_attachment. The bytes travel as text through the conversation and cost roughly a third more than the file itself, so there is a size ceiling; for anything larger — or for putting the file on disk — the pm-files MCP server saves it to a path instead (local_files_setup says how to connect it). Reading needs only permission to see the page.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Exact page title, when identifying the page by title. | |
| pageId | No | Page id (as returned by search_wiki). | |
| filename | Yes | File name, as listed by get_wiki_page. | |
| spaceKey | No | Space key, when identifying the page by title. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/destructiveHint=false, but the description adds real behavioral context beyond them: the payload travels as base64 text through the conversation and costs 'roughly a third more than the file itself,' there is a size ceiling, and reading requires only page-visibility permission. These are the operational traits an agent needs before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with what is returned and how the target is identified, then the copy workflow, then the size/permission caveats. Dense and purposeful, though the pm-files redirect could be trimmed to a single clause without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return value itself (base64 bytes) and bounds it with a size ceiling and the alternative path for large files. Nothing needed to invoke it correctly — target resolution, permission requirement, output form, limits — is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description still adds value by tying 'filename' to get_wiki_page's listing and framing pageId vs spaceKey+title as mutually exclusive page-identification routes, which the schema alone presents only as optional fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Read one file attached to a wiki page — its bytes, base64-encoded' — and spells out both addressing schemes (pageId, or spaceKey + title, plus filename). This clearly separates it from get_wiki_page (whole page), get_attachment (non-wiki), and add_wiki_attachment (the write counterpart).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the workflow it belongs to — 'read it here, write it with add_wiki_attachment' — and names the alternative when it doesn't apply: 'for anything larger — or for putting the file on disk — the pm-files MCP server saves it to a path instead (local_files_setup says how to connect it).' Both the use case and the exclusion are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wiki_pageGet wiki pageARead-onlyInspect
Get one wiki page by id, or by space key + title, if it is visible to this token. Returns the page text, its labels, its parent and child pages, its comments, and the issues linked to it. Pass withMarkdown: true when you intend to edit it — you then get the page's Markdown source to change and hand back to update_wiki_page, and each comment's own Markdown, version and anchor for update_wiki_comment. A large page is read a part at a time: 'outline' lists its headings and how big each section is, then 'section' returns one of them (or 'offset'/'limit' a run of lines), and update_wiki_page's 'edits' changes just the words you mean without sending the page back. A page with manim code blocks (where the company has scenes switched on) also returns 'scenes': each block's drawing state — queued, rendering, done or failed — manim's own error when it failed, and the attachment it was drawn into. A page with anim blocks (a scene as JSON the reader's client plays itself, no rendering) returns 'anims': for each, whether it can be shown, its length, or every problem with where it stands.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Page id (as returned by search_wiki). | |
| limit | No | How many lines to return from 'offset' (default 200). | |
| title | No | Exact page title, when looking the page up by title. | |
| offset | No | Return only the Markdown source from this 1-based line on — for a page without headings to navigate by. Pair with 'limit'. | |
| outline | No | Return the page's table of contents instead of its body: per heading its level, text, anchor, the 1-based lines its section spans in the Markdown source, and its size in characters. Start here on a large page. | |
| section | No | Return only this section's Markdown — its heading line down to the next heading of the same or a higher level, subsections included. Name it by its anchor (as 'outline' gives it: the id a {toc} entry links to) or by its heading text. | |
| spaceKey | No | Space key, when looking the page up by title. | |
| withRelated | No | With 'outline', 'section' or 'offset': also return the page's children, attachments, comments and linked issues, which a partial read otherwise leaves out. | |
| withMarkdown | No | Return the Markdown source ('markdown') instead of the plain text — what to edit and pass back to update_wiki_page, and, for each comment, to update_wiki_comment. Off by default: reading costs less as text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, non-destructive and closed-world, yet the description still adds real behavior: token-scoped visibility, the full set of side data returned (labels, parents, children, comments, linked issues), the text-vs-Markdown cost tradeoff, and the partial-read model. It omits what happens when the page is missing or invisible (error vs empty), which is the one behavioral fact an agent would still want.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and lookup modes are front-loaded in the first sentence, and every subsequent sentence carries information. However, it is a single dense block, and the ```manim/```anim sentences are niche relative to core read behavior, slightly overweighting the tail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must carry the return shape, and it does so in detail down to scene states and anim validity. Minor gap: core fields are enumerated only in passing, and no error/no-access behavior is described, so an agent still has unknowns at the edges.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds cross-parameter meaning the schema does not: it chains outline → section → offset/limit as a paging strategy and implies withRelated must be set on partial reads to keep children/comments. That interaction guidance is genuine added value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (get one wiki page) plus both lookup keys (id, or spaceKey + title) and the visibility condition that governs the result. An agent can distinguish it from search_wiki (find) or get_wiki_page_reading (read state) without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit conditional guidance: use withMarkdown when you intend to edit, and the returned Markdown is what you hand to update_wiki_page / update_wiki_comment. It also implies the outline-then-section strategy for large pages. It stops short of naming exclusion cases, such as when to prefer search_wiki or get_linked_confluence_page instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wiki_page_approvalGet wiki page approvalARead-onlyInspect
A wiki page's APPROVAL: which edition is in force. 'version' is the edition the page is at now and 'approved' whether that very edition is approved. 'inForce' is the newest edition somebody's approval stands on — its 'version', when it was written, when it was approved and 'by' whom (null: the page was never approved). When 'inForce.version' is lower than 'version' the page was EDITED AFTER it was approved: the text you read with get_wiki_page is not the approved one. 'approvers' are the people named on the page as those who may approve it (the project's lead always may), 'canApprove' / 'canAsk' what you may do, and 'journal' every line ever written, newest first — asked, released, approved, withdrawn; no line is ever changed or removed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Page id (as returned by search_wiki). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial context beyond the read-only annotations: it defines each returned field, explains null semantics, clarifies the relationship between version and inForce, and discloses that the journal is immutable and ordered newest-first.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and every sentence conveys useful return-value semantics. It is somewhat dense and could be made more skimmable, but there is no evident waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there is no output schema and only one documented parameter, the description does a thorough job of explaining the returned object and its nuances. An agent has enough information to call and interpret this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with one parameter whose description already states 'Page id (as returned by search_wiki).' The tool description does not add further meaning to the parameter, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies a specific resource (wiki page approval) and explains exactly what information it returns: version, approved status, in-force edition, approvers, permissions, and journal. It also distinguishes itself from get_wiki_page by explaining when the text read there is not the approved text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied through the field explanations and the contrast with get_wiki_page, but there is no explicit statement of when to call this tool versus siblings like approve_wiki_page, ask_wiki_page_approval, or withdraw_wiki_page_approval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wiki_page_readingGet wiki page readingARead-onlyInspect
A wiki page as REQUIRED READING: whether somebody is asked to read it and mark so. 'edition' is the version to read — the approved edition in force where the page has one (see get_wiki_page_approval), else the one its lead last asked about; null when the page is asked of nobody. 'required' says whether it is asked of YOU and 'readAt' when you marked that edition (absent: not yet). 'readers' is the list as written: a person, 'members' (everybody on the project) or a team role. For the project's lead there is also 'people' — everybody the page is for today, each with 'askedAt', 'readAt' and 'remindedAt' for that edition, so who has NOT read it is whoever has no 'readAt' — and 'earlier', the marks on earlier editions. A mark is on an edition: a newer approved edition leaves the old marks in 'earlier' and asks everybody again.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Page id (as returned by search_wiki). |
TDQS
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), and the description adds real behavioural substance beyond that: the edition/mark model, that absent 'readAt' means not yet read, and crucially that 'people' and 'earlier' only appear for the project lead — a permission-dependent output shape an agent must know. It does not cover error behaviour for a missing page id or any size/pagination concerns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content is dense with no filler, but it is delivered as one long run-on paragraph with awkward clauses ('whether somebody is asked to read it and mark so', 'and 'earlier', the marks on earlier editions'). Field semantics would read far better as a short list, and the lead-only extras are buried mid-sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must explain the return shape and largely does: edition resolution, required/readAt, the three forms of 'readers', and the lead-only 'people'/'earlier' blocks. Missing only edge behaviour (nonexistent page, pages with no reading request beyond the null-edition hint).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single required parameter with 100% schema description coverage ('Page id (as returned by search_wiki).'), so the schema already does the work. The description adds no additional meaning about the id, which is the expected baseline-3 case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description makes clear the resource is a wiki page's required-reading state ('whether somebody is asked to read it and mark so'), and it explicitly cross-references get_wiki_page_approval for the approved edition, separating it from the approval sibling. It lacks a clean leading verb (it opens with a noun phrase, 'A wiki page as REQUIRED READING'), so the purpose is clear but not maximally crisp.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer it should call this to learn who has been asked to read a page and who has marked it, and the pointer to get_wiki_page_approval helps resolve the edition field. There is no explicit statement of when to use this instead of get_wiki_page, mark_wiki_page_read, or set_wiki_page_readers, and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wiki_page_reviewsGet wiki page reviewsARead-onlyInspect
A wiki page's REVIEWS: who checked which version of it, and what they found. Each review has the 'version' its reviewer read, the 'reviewer' (and the 'agent' that read it for them, where one did), a 'verdict' — 'correct', 'gap' (something not argued), 'error', or null while under way — a 'summary', and 'remarks', each tied to a place: 'anchor' is 'page', 'heading' (key: the heading's anchor), 'claim' (key: a claim block's label, as in ::: theorem {#thm:x}), 'formula' (key: the \label{…} in it) or 'quote' (the words quoted). A remark's 'state' is 'open' (stands on the page as it is now), 'check' (its place reads otherwise in the current version, or is gone — it may be fixed, and waits for the author to say so), 'fixed' or 'withdrawn'. 'anchors' lists the places a remark may be put on now; 'canReview' and 'canAnswer' say what you may do.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Page id (as returned by search_wiki). |
TDQS
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 description correctly spends its budget elsewhere: it discloses the verdict vocabulary, the four remark states and what each means, and the permission flags returned. It adds no operational behavior such as pagination, ordering, or error conditions, which keeps it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, but the remainder is a single dense run-on enumerating every field, enum value, and anchor key. The content largely earns its place given the absence of an output schema, yet the lack of structure (bullets or separate sentences) makes it hard to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the full burden of explaining return values — and it does: review fields, verdict values, remark states, anchor kinds with their key formats, and the anchors/canReview/canAnswer fields. An agent can interpret the response without further documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter, and the schema documents it at 100% coverage including its cross-reference to search_wiki. The description says nothing about the id argument, which is acceptable given full schema coverage but adds no value on this dimension.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening states a specific resource — a wiki page's reviews — and narrows it to 'who checked which version of it, and what they found', which is far more than a restatement of the name. It doesn't explicitly name the nearest siblings (review_wiki_page, answer_review_remark, get_wiki_page_reading), so an agent must infer the boundary from the resource word alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the closing note that 'canReview' and 'canAnswer' say what you may do hints that this tool is a read-then-act entry point for review workflows, but the description never says when to call it versus review_wiki_page or answer_review_remark. No prerequisites, no exclusions, no alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_sources_bibImport sources bibADestructiveInspect
Read a BibTeX file's text against a project's register of sources. Without 'take' nothing is written: each entry comes back as an offer — 'new' (a source to add under the entry's key), 'fill' (the register already has the work by one of its identifiers: 'adds' lists the empty fields the entry would fill; 'unchecks' says a checked source would go back to unchecked), 'same' (nothing to add), 'conflict' ('keyTaken': the key is another work's — take it with 'as', a new key; 'twoSources': its identifiers name two sources; 'twice': it is twice in the file) or 'invalid' (no title, or a key a source cannot have). 'differs' names what the register says otherwise — never overwritten — and 'notes' what of the entry could not be read; 'problems' are places in the file that are not entries. Show the person the offers, then call again with the same 'bib' and 'take' — the entries they chose — to write them; each is written on its own and says 'created', 'filled', 'skipped' or 'refused' with the reason. Members of the project who may write only, for 'take'.
| Name | Required | Description | Default |
|---|---|---|---|
| bib | Yes | The .bib file's text. | |
| take | No | The entries to write, as a JSON array: [{"key":"GS90"},{"key":"Tah81","as":"Tah81b"}] — 'key' the entry's key in the file, 'as' a new key for an entry whose key the register has for another work. Leave out to only see the offers. | |
| project | Yes | The project key, e.g. MATH. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite destructiveHint=true in the annotations, the description carries real behavioral weight: it says exactly what is and isn't written without 'take', that 'differs' values are never overwritten, that a 'fill' can revert a checked source to unchecked, and that each taken entry reports created/filled/skipped/refused independently. That is far beyond what the annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and the safety rule, and each clause carries information. It is, however, a single very dense paragraph whose quoted status terms are hard to scan; breaking the offer kinds into a list would improve it without adding length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates fully by enumerating every result shape (new, fill, same, conflict, invalid) and every write outcome, plus where non-entry file problems surface. An agent has enough to interpret the response and act on it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds the operational meaning of the parameters — that 'take' must reuse the same 'bib' and holds the keys of the chosen entries, and that 'as' renames a key collision. That materially helps an agent construct the second call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read a BibTeX file's text against a project's register of sources') and immediately establishes the import direction, which no sibling tool covers — export_sources_bib is its obvious inverse. An agent can identify 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit two-step procedure (show offers, then call again with the same 'bib' plus 'take') and states the permission precondition ('Members of the project who may write only, for 'take''). It never names an alternative tool for single-source edits, so it stops short of full when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
link_issuesLink issuesAInspect
Link two issues: link_issues('PM-419', 'PM-417', 'is blocked by') records that PM-419 is blocked by PM-417. 'type' is the PHRASE, said as a person says it — 'blocks', 'is blocked by', 'duplicates', 'is duplicated by', 'clones', 'relates to' — so the direction is in the words and the arguments cannot disagree; a bare type name ('Blocks') points outward, as it does in Jira. A phrase this workspace does not have is REFUSED and the ones it does have are named, rather than quietly becoming 'relates to'. The link then shows on both issues (get_issue returns 'links'), and linking the same pair the same way again changes nothing. Requires permission to edit BOTH issues — a link is a change to the issue at each end. 'to' may also be an issue of ANOTHER company's PUBLIC project, as 'company/KEY-12' (e.g. 'math/D5-12') or its address there: it is read as somebody with no account reads it, linked only while public, shown in get_issue's 'publicLinks' with a 'state' that says 'unavailable' once its project closes, and the other company is not told. That needs permission to edit 'from' only.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | The issue at the other end, e.g. 'PM-417' — or another company's public issue, 'math/D5-12'. | |
| from | Yes | The issue the phrase is said about, e.g. 'PM-419'. | |
| type | Yes | How 'from' relates to 'to', in words: 'blocks', 'is blocked by', 'duplicates', 'clones', 'relates to'. Whatever this workspace's link types call themselves — a refusal lists them. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Far exceeds what the annotations convey: it discloses that unknown phrases are refused with the valid list named (never silently downgraded to 'relates to'), that the operation is idempotent, that it requires edit permission on BOTH endpoints, and how cross-company public links behave and decay to 'unavailable'. Annotations only say it is non-read-only/non-destructive; the description adds the real behavioral contract.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the example and then layered operational detail, with no filler sentences. The final cross-company sentence is a long run-on that stacks several clauses, which slightly hurts scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates by explaining exactly how the result surfaces (on both issues via get_issue's 'links', or under 'publicLinks' with a 'state'). Between permissions, idempotency, refusal behavior and visibility, an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, yet the description adds genuine meaning: 'type' is a spoken phrase whose direction is encoded in the words, the arguments cannot then disagree, and a bare 'Blocks' behaves like Jira's outward convention. It also explains that 'to' can be a 'company/KEY-12' reference, beyond the schema's brief note.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Link two issues') and reinforces it with a concrete worked example ('link_issues("PM-419", "PM-417", "is blocked by")'). That makes it immediately distinguishable from the sibling unlink_issues and from generic issue-mutation tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives strong 'how to get it right' guidance: use the phrase form, that direction lives in the words, and that a bare type name points outward. It does not explicitly name unlink_issues as the counterpart for removal, so alternative routing is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
link_termsLink termsADestructiveInspect
Say how one term of a project stands to another (PM-1053): 'from' rests on 'to' ('dependsOn', the default), is a special case of it ('specialCaseOf'), or is its opposite ('oppositeOf'). 'state' 'confirmed' (the default) keeps the link — shown to readers beside the term and used for the order of reading; 'rejected' turns down a link term_graph proposed, so the definition does not offer it again; 'none' takes a link away. Terms are named by id or spelling, as term_graph returns them; 'to' must be of the project or one above it. Members of the project who may write only.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | The term rested on: id or spelling. | |
| from | Yes | The term that rests on the other: id or spelling. | |
| kind | No | 'dependsOn', 'specialCaseOf' or 'oppositeOf'. Default 'dependsOn'. | |
| state | No | 'confirmed', 'rejected' or 'none'. Default 'confirmed'. | |
| project | Yes | The project key. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description explains real consequences: 'none' takes a link away, 'rejected' suppresses a term_graph proposal so it is not offered again, and 'confirmed' makes the link visible to readers and affects reading order. It also discloses that only project members who may write can use it, which is meaningful behavioral context for a destructive write operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core operation and then adds relation-kind and state semantics in a compact paragraph. It is dense but largely earns its length, with only minor asides such as the issue reference that could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter destructive linking tool with no output schema, the description covers the crucial invocation details: relation kinds, state effects, term naming, the 'to' scope constraint, and write permissions. An agent has enough information to call it correctly without needing return-value details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents all five parameters at full coverage, but the description adds substantial semantic detail for 'kind' and 'state', including defaults and downstream effects. It also adds the constraint that 'to' must belong to the project or one above it, which is not obvious from the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific operation: linking one project term to another with a relation kind. It clearly distinguishes the three relation kinds and covers link state changes, but it does not explicitly differentiate this tool from siblings such as define_term, merge_terms, or term_graph.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context for 'state' values: 'confirmed' keeps the link, 'rejected' declines a proposed link, and 'none' removes a link. It also states the permission requirement and the constraint on 'to', though it does not name alternative tools or explicitly say when to prefer this over them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
link_wiki_pageLink wiki pageAInspect
Link a wiki page to an issue. The link then shows on both the issue and the page, and survives the page being renamed or moved. Identify the page by 'pageId', or by 'spaceKey' + 'title'. Linking the same page again updates that link instead of adding a second one. Requires permission to edit the issue.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Exact page title, when identifying the page by title. | |
| pageId | No | Page id (as returned by search_wiki). | |
| issueKey | Yes | Issue key, e.g. 'UK-1'. | |
| spaceKey | No | Space key, when identifying the page by title. | |
| relationship | No | How the page relates to the issue, free text — e.g. 'documentation' (the default), 'specification', 'design'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: the link is bidirectional and survives rename/move, re-linking is idempotent (updates the existing link rather than duplicating), and an auth requirement is called out. These are exactly the mutation-side traits annotations (readOnly=false, destructive=false) cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, front-loaded with the action, then result behaviour, identification modes, idempotency, and the permission gate. No sentence is redundant with the title or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-param, no-output-schema mutation tool this covers everything an agent needs: what it does, how to identify the target, what happens on repeat calls, and the permission requirement. Remaining detail (relationship values, issueKey format) is fully handled by the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so baseline is 3, but the description adds a real semantic rule the schema does not state: the page is identified either by 'pageId' alone or by 'spaceKey' + 'title' together. The 'relationship' parameter is left to the schema, which documents it adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource pair ('Link a wiki page to an issue'), which is inherently distinct from neighbours like link_issues (issue-to-issue) or add_wiki_attachment. It never explicitly contrasts itself with those siblings, so differentiation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a prerequisite ('Requires permission to edit the issue') and two identification paths, which imply when the tool applies, but it never says when to prefer unlink_wiki_page, link_issues, or add_wiki_attachment, and offers no exclusions or failure conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_chatsList chatsARead-onlyInspect
The chats you are in, the most recently written to first: direct chats with one colleague ('with'), groups ('title', 'members', who is an administrator), each project's own chat ('project' — everybody who may open the project is in it), chats with an agent ('agents'). Each says how many messages you have not read ('unread'), up to which message you have read ('readUpTo'), whether you muted it, and its last message. With projectKey, just that project's chat. Read a chat with get_chat_messages; write with send_chat_message.
| Name | Required | Description | Default |
|---|---|---|---|
| projectKey | No | A project's key: only that project's own chat — refused when you may not open the project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only, non-destructive, closed-world profile, yet the description adds real value: sort order, the fields each row carries ('unread', 'readUpTo', mute status, last message), and the permission-refusal behavior for projectKey. It stops short of saying anything about result size or pagination limits for a potentially unbounded list.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the resource and ordering, and the trailing sentences carry routing and filtering. The dense parentheticals ('title', 'members', who is an administrator) slow scanning somewhat, but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by naming the fields returned and the ordering, plus the permission failure mode for the one parameter. An agent has everything needed to call and interpret it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single projectKey parameter is fully documented in the schema, including the refusal case. The description's 'With projectKey, just that project's chat' largely restates the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('the chats you are in') and immediately enumerates the chat variants returned: direct, group, project, and agent chats. The ordering rule ('most recently written to first') and the returned metadata make it fully distinguishable from siblings like get_chat_messages and create_chat.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: 'Read a chat with get_chat_messages; write with send_chat_message', and explains that projectKey narrows to a single project's chat. Use vs. alternative is stated rather than inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_claimsList claimsARead-onlyInspect
A project's claims, each with its label (what a paper's \label and a citation name it by, e.g. 'thm:d5-rank5'), its number, its statement (Markdown with formulas), its status and what it rests on. A project writes them on one of two scales, answered as 'scale' with its 'statuses' and 'kinds': 'math' — theorem, lemma, proposition, corollary, conjecture, question; 'open' (not proved), 'paper' (proved on paper), 'computer' (by a computation), 'lean' (formalised in Lean), 'refuted', 'retracted' (taken back — the † of a result) — or 'law' — position, conclusion, risk, obligation; 'draft', 'agreed', 'practice' (confirmed by practice), 'disputed', 'outdated' (the norm under it changed). set_claim_scale chooses it. A basis is a wiki page with the proof ('page', its id and title — or 'hidden' where you may not open the page), a computation by the name a [comp:…] cites ('computation'), a Lean declaration ('lean'), a source in words ('source') or a norm of law ('legal': the act on the legal shelf — 'legal.document', its id for get_legal_document, its title and the 'place' cited — with 'changed' true when the act's publisher has said other words since, 'reaches' whether the change is in the place cited (null where that cannot be told), 'changedAt', and 'asOf' — when the text it rests on was received, its edition; a person marks it looked at on the register's screen). This register is where a claim's status is kept: read it here rather than from a page's words, and change it with set_claim_status. Ordered by number, then label. Anybody who sees the project.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Words its label, number, title or statement holds, case aside. | |
| kind | No | Only claims of this kind, one of the project's scale. | |
| status | No | Only claims of this status, one of the project's scale. | |
| project | Yes | The project key, e.g. MATH. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, closed-world, non-destructive behavior. The description adds useful context beyond that: ordering by number then label, access scope ('Anybody who sees the project'), and the meaning of hidden basis pages and legal-change fields. It omits pagination or result-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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a dense run-on that spends most of its length enumerating statuses, kinds, and basis fields. Much of that detail belongs in set_claim_scale, get_claim, or the legal document tools, and the core 'list claims with these filters' message is buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Because there is no output schema, the description must explain the return shape, and it does: label, number, statement, status, basis, plus scale-specific statuses and kinds. It is nearly complete for a read-only list tool, missing only pagination or limit behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents q, kind, status, and project. The description still adds value by explaining that kind and status are drawn from the project's scale and by enumerating the math and law scales and their statuses, which helps an agent choose valid filter values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description makes clear this returns a project's claims with their label, number, statement, status, and basis. It distinguishes the tool from page prose and from set_claim_status, though it never explicitly says 'list' or contrasts with get_claim.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to read claim status here rather than from a page's words, and to change status with set_claim_status. That gives clear usage context, but it does not distinguish list_claims from get_claim or say when a filtered listing is preferable to fetching one claim.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_codeList codeARead-onlyInspect
List a directory of a repository connected to a project. Only repositories whose owners opened them to agents can be read.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Directory inside the repository. Omit for its root. | |
| repo | No | Which repository, as 'group/repo'. Its last segment alone is enough when unambiguous; omit it when only one is open. | |
| reference | No | Branch, tag or commit. Omit for the default branch. |
TDQS
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 the access restriction, but says nothing about ordering, pagination, truncation, or what entries look like (files vs. directories).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences; the core action is stated first and the access caveat second. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should say roughly what a listing returns (names, paths, file vs. directory, nested depth). That gap matters for an agent deciding whether one call suffices or whether it must recurse.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so path, repo and reference are fully documented in the schema (including defaults and omission semantics). The description adds no parameter meaning beyond it, which is acceptable at this coverage level.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (a directory of a connected repository), which is precise enough to distinguish it from read_code, search_code and code_symbols. It stops short of explicitly contrasting with those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The prerequisite 'Only repositories whose owners opened them to agents can be read' is useful, but there is no guidance on when to choose list_code over read_code/search_code/code_symbols, and no mention of what happens when the repo is not open.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_computationsList computationsARead-onlyInspect
The computations issues rest on, as their runners reported them: state, progress, the commit and repository, the job's page and output, and what came of it. With 'key', one issue's; with 'projectKey', the project's, newest first and the ones still going on top — state 'open' (queued or running) is what is going now, which is the first thing to ask after a lost session instead of reading status comments. 'state' may also be one of queued, running, done, failed, cancelled, lost.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | One issue's computations, e.g. 'MATH-74'. | |
| limit | No | How many, for a project (default 50, max 200). | |
| state | No | Only this state, or 'open' for queued and running together. | |
| projectKey | No | A project's computations, e.g. 'MATH'. Ignored when 'key' is given. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only/non-destructive profile, and the description adds real behavioural detail beyond them: result ordering ('newest first and the ones still going on top'), the default scoping precedence, and the fact that 'open' expands to two underlying states. It does not cover pagination behaviour beyond the limit field, but that is minor for a read tool with annotations already in place.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense and largely waste-free, but the prose is convoluted with em-dash asides and the actionable ordering/state information is buried mid-sentence rather than front-loaded. The opening clause spends words on a metaphor before saying what the tool returns.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter read tool with no output schema, the description covers scoping, precedence, ordering, state values and the shape of returned records. The only gap is what happens with pagination/limits when many computations exist, which the schema's limit field partially covers.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description goes further: it enumerates the concrete state values (queued, running, done, failed, cancelled, lost) where the schema defines no enum and only hints at 'open', and it explains that 'key' overrides 'projectKey'. It also clarifies what 'open' means in terms of two states grouped together.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description makes clear this returns the CI/computation records attached to issues, including state, progress, commit, repository, job page and output. It distinguishes the two scoping modes ('key' = one issue's, 'projectKey' = the project's) so an agent can tell how this differs from a generic issue listing. The opening phrase 'the computations issues rest on' is abstract and the verb 'list' is only implied by the name, which keeps it out of 5 territory.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly recommends state 'open' as 'the first thing to ask after a lost session instead of reading status comments', which is a concrete when-to-use plus a named alternative behaviour. It also states 'key' takes precedence over 'projectKey'. No explicit 'when-not-to-use' or mention of the sibling delete_computation, but the routing guidance is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_credentialsList credentialsARead-onlyInspect
List the credentials attached to an issue or a wiki page that this token may read — names and who attached them, never the values. Pass issueKey or pageId. Use reveal_credential to read one value, and only when you are about to use it.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | No | Wiki page id. | |
| issueKey | No | Issue key, e.g. 'UK-1'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=true and non-destructive, so the safety profile is covered; the description adds real context beyond that — results are filtered by token permissions and values are never returned, which prevents the agent from expecting secrets in the output. It stops short of describing ordering, pagination, or behavior when neither or both parameters are supplied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The core promise (names, never values) is front-loaded, followed immediately by the parameter rule and the sibling routing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must characterize the return value and does so precisely ('names and who attached them, never the values'). Combined with the parameter rule and alternative routing, an agent has everything needed to call this correctly and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; however the description adds meaning the schema does not convey — that issueKey and pageId are alternatives ('Pass issueKey or pageId'), which matters because the schema marks both optional with zero required parameters and gives no mutual-exclusion hint.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List the credentials attached to an issue or a wiki page'), plus scope ('that this token may read') and exactly what is returned ('names and who attached them, never the values'). It is clearly distinguishable from reveal_credential and create_credential without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the selection rule explicitly: 'Pass issueKey or pageId' for this tool, and 'Use reveal_credential to read one value, and only when you are about to use it' as the alternative with its qualifying condition. This is exactly the when/when-not routing an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_environmentsList environmentsARead-onlyInspect
A project's environments, in order, and its ten newest deployments. An environment is one of the places a project's work is put out to — 'dev', 'staging', 'prod' — in order; the LAST one is where finished work ends up. A deployment is a pipeline saying «this went out, there». Each issue it carried then says where it lies ('deployedTo' on get_issue), gets one history line per environment, and the project's rules with trigger 'deployed' run on it. Also 'canEdit' (you may change the list) and 'canReport' (you may report a deployment). Any member may read them.
| Name | Required | Description | Default |
|---|---|---|---|
| projectKey | Yes | Project key, e.g. 'ONB'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/non-destructive annotations, the description discloses a real truncation limit ('ten newest deployments'), the ordering guarantee, the permission model, and the meaning of the canEdit/canReport flags in the response. It also states downstream effects — deployedTo on get_issue, one history line per environment, and that project rules with trigger 'deployed' run — which materially changes how an agent should interpret the result.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The key facts (what is listed, the ten-deployment cap, canEdit/canReport) are front-loaded in the first and last clauses, which is good. The middle is tutorial prose — em-dash definitions of 'environment' and 'deployment' plus rule-trigger implications — that is informative but dilutes focus and pushes the response-shape details to the end.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description does cover return contents: ordered environments, ten newest deployments, canEdit, canReport. It doesn't enumerate the fields of a deployment object beyond its meaning, but the cross-reference to get_issue and report_deployment gives an agent enough to proceed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter projectKey is fully documented in the schema (100% coverage, with an example like 'ONB'), so the schema carries this dimension. The description adds no format or edge-case guidance about the key beyond what the schema already says, which is the baseline-3 case for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names a specific resource and scope: a project's environments in order plus its ten newest deployments. It also defines the two domain nouns (environment, deployment) so an agent unfamiliar with the model isn't guessing. It doesn't explicitly contrast with the write-side sibling set_environments, which keeps it off a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied — read this to learn a project's environment order and recent deployments — and the access rule 'Any member may read them' tells the agent who can call it. But there is no explicit when-to-use/when-not, and no pointer to set_environments as the mutation alternative despite it being the obvious sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_issue_questionsList issue questionsARead-onlyInspect
Questions with answer options, in either direction: what is waiting on YOU to answer (role='to_me'), what YOU asked and are waiting on somebody for (role='asked'), or everything on one issue. This is how you find out whether the question you asked has been answered — poll it, since ask_issue_question does not wait. With no 'key' the default is role='to_me'; with a 'key' it is every question on that issue. Open ones by default; pass state='all' for the answered, withdrawn and expired ones too.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | Limit to one issue, e.g. 'UK-1'. Omit to look across every project this token can reach. | |
| from | No | 'agent' for only what an agent put to somebody (a resolution, PM-602), 'people' for only what a person asked. Omit for both. | |
| role | No | Whose questions: 'to_me' (waiting on you to answer), 'asked' (you asked them, and you are waiting), or 'any'. Defaults to 'to_me' with no key, and to 'any' when a key is given. | |
| limit | No | How many to return (default 20, max 100). | |
| state | No | 'open' (the default — still waiting on somebody) or 'all', which adds the answered, the withdrawn and the expired (the deadline passed with no default and no answer). | open |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuine behavioral context beyond structured fields: the polling model, the fact that ask_issue_question does not block, and that state='all' includes withdrawn/expired items. It does not describe return fields or pagination behavior, so not a top score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the tool's purpose and modes, then the polling rationale, then defaults. Little redundancy and no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with no output schema, the description covers modes, defaults, and filtering behavior adequately. The shape of returned questions (fields, answer-option structure) is only implied, a minor gap given the absent output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description nevertheless frames what each role mode means in operational terms (what is waiting on YOU, what YOU asked), and clarifies the conditional defaulting between key and role, adding interpretive value over the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the specific verb (list) and resource (issue questions), and immediately distinguishes the three modes: waiting on you (role='to_me'), you asked (role='asked'), or everything on one issue. It is clearly separable from siblings like ask_issue_question and answer_issue_question.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent when to use this tool — to find out whether a question you asked has been answered — and explains that ask_issue_question does not wait, so polling is required. Defaults (role='to_me' with no key, every question with a key; open-only unless state='all') are stated directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_issue_schedulesList issue schedulesARead-onlyInspect
A project's RECURRING ISSUES: issues it files by itself on a calendar — a monthly report, a quarterly review, a licence renewed every year. Each has the issue as words (summary, description, type, assignee, priority, labels), the cadence ('every' N of 'unit': week or month — 3 months is a quarter, 12 a year), 'nextDay' it files on, 'dueInDays' (the filed issue's due day, counted from the day it is filed), whose it is (it files in that person's name) and, when the last day filed nothing, 'halted' ('owner_lost': its owner can no longer configure the project and it is switched off; 'refused': the filing was refused, 'lastError' says why). 'lastIssueKey' is the last one filed. Any member may read them.
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | The project key, e.g. PM. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/safe/non-open-world, and the description adds real value on top: it documents the 'halted' states ('owner_lost' vs 'refused' with 'lastError') and that filing happens in the owner's name. It stops short of describing ordering or how many schedules are returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded correctly with the core concept, but it is a single sprawling sentence with stacked parentheticals that is harder to parse than necessary. Every clause carries information, yet the density works against scanability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Since there is no output schema, explaining the returned fields (cadence, nextDay, dueInDays, halted reasons, lastIssueKey) is exactly the needed compensation and it is done thoroughly. Only return ordering/count details are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single 'project' parameter is fully documented in the schema ('The project key, e.g. PM'), so the schema does the heavy lifting. The description adds nothing about the parameter itself, only about returned fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('A project's RECURRING ISSUES ... issues it files by itself on a calendar') and gives concrete examples (monthly report, quarterly review). It doesn't name the sibling set_issue_schedule/delete_issue_schedule, so differentiation is implied by the list/set naming rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the word 'List' and the read framing. It never says to use this before set_issue_schedule or delete_issue_schedule, nor when a schedule list is the right lookup versus find_issues. The access note ('Any member may read them') is the only contextual guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_join_requestsList join requestsAInspect
The requests of people outside the company to take part in a public project: who asked, what they wrote, when — those waiting first, then the last twenty decided. Approved, a person files issues and comments in that project and nothing else; they take no seat and see nothing else of the company. Only the project's owner and its administrators see and decide them.
| Name | Required | Description | Default |
|---|---|---|---|
| projectKey | Yes | Key of the public project, e.g. 'LIB'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds real context beyond the annotations: authorization is limited to project owners and administrators, the list order is pending-first followed by the last twenty decided items, and approval grants only issue/comment access in that one project. This is valuable behavioral detail not available in the schema or annotations. It does not describe pagination or what happens beyond the twenty decided items, leaving a small gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content is front-loaded, starting with what is returned and then adding ordering, permission, and access semantics. The single dense sentence is efficient, though the listing clause ('those waiting first, then the last twenty decided') is slightly awkward to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully characterizes the returned fields (requester, message, timestamp) and ordering. Combined with the explicit authorization scope, an agent has enough to invoke and interpret the call, with only minor gaps around volume and pagination.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents the single required parameter projectKey with a concrete example ('LIB') at 100% coverage, so the baseline is 3. The description only implies the project key by referring to 'a public project' and adds no format or constraint details beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete resource and scope: join requests from people outside the company to a public project, including who asked, what they wrote, and when. It is clearly distinguishable from siblings like decide_join_request because it frames this as viewing requests that others decide. It stops short of naming the sibling that acts on these requests, so it lands at 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for when this is relevant: only a project's owner and administrators can see these requests, and the mention that they 'decide them' implicitly routes decision-making to a different tool. It does not explicitly say when not to use it or name decide_join_request as the alternative, so it is a strong 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_legal_libraryList legal libraryBRead-onlyInspect
List the acts in the legal library — what this installation's agents have already read off the official sites: url, title, the day the text is as of (fetched_at), when the site last confirmed it (checked_at) and its length. Open where the company lets an agent role read laws.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many, at most 200. Default 50. | |
| filter | No | Only acts whose title or address contains this. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true, destructiveHint=false, and closed-world scope, so the safety profile is covered. The description adds useful context about what the cache represents ("what this installation's agents have already read off the official sites") and the meaning of fetched_at vs checked_at, but says nothing about ordering, pagination behavior, or what happens when the role lacks legal-read permission.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the verb and resource, and the field list is compact and informative rather than padded. The second sentence ("Open where the company lets an agent role read laws") is awkwardly phrased and reads as an afterthought rather than earning its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description appropriately enumerates the returned fields and disambiguates fetched_at from checked_at, which is genuinely needed. Given read-only annotations and fully documented parameters, the remaining gap is only the lack of routing to the sibling search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with limit (max 200, default 50) and filter fully documented in the schema. The description does not supplement those parameters at all, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("List the acts in the legal library") and enumerates the fields returned (url, title, fetched_at, checked_at, length), which makes the content scope unmistakable. It does not, however, distinguish itself from near-siblings like search_legal_library, get_legal_document, or list_legal_references, so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 search_legal_library or get_legal_document. The trailing clause "Open where the company lets an agent role read laws" gestures at a permissions/environment constraint but is too cryptic to act on, and no exclusions or prerequisites are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_legal_referencesList legal referencesARead-onlyInspect
The legal acts one issue or one wiki page refers to — in its own text and in the comments on it. Each reference: its 'id' (pass it to remove_legal_reference), where it stands ('in': issue, comment, page or wikiComment, with 'commentId'), the act ('document': id, url, sourceUrl, title, hasText, asOf — the day its text is as of), the 'place' cited («Article 18»), the 'quote' it was read from, 'foundBy' (url, pattern, model or hand) and 'state' — 'proposed' is the model's offer that nobody accepted yet, 'rejected' one somebody said no to. 'editionChangedAt' is set when the act's text was found changed since the reference was made and nobody has looked at it since ('editionReaches': whether the change is in the place cited, null when that cannot be told) — a person marks it looked at on the screen. 'enabled' false means the project does not keep legal references, and the list is empty. Needs only permission to see the issue or the page. In JQL and CQL the same is the field legalRef.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Wiki page id (as returned by search_wiki). Either this or 'issue'. | |
| issue | No | Issue key, e.g. 'UK-1'. Either this or 'page'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/non-destructive, but the description adds substantial context beyond them: what 'enabled: false' means (empty list, project keeps no references), the meaning of 'state' values, the 'editionChangedAt' change-detection semantics, and the exact permission needed. This is rich disclosure that 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose, then explains return fields, which is warranted since there is no output schema. The dense parenthetical run-ons about 'editionChangedAt' and 'editionReaches' are slightly hard to parse, but nearly every sentence carries needed information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully shoulders the burden of explaining the returned structure (id, location, document metadata, place, quote, foundBy, state, change tracking) and the enabling condition. Nothing an agent needs to interpret the result is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so 'page' and 'issue' are already documented as the two alternatives. The description reinforces the either/or scoping but adds no syntax or format detail beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource and goes further to define what a legal reference is: the acts an issue or wiki page refers to in its text and comments. An agent can distinguish this from search_legal_library, find_by_legal_document, or get_legal_document by the per-issue/per-page scoping.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly scopes usage to a single issue or wiki page and notes the permission requirement, and points to remove_legal_reference for the returned id. It stops short of explicitly contrasting when to use this versus search_legal_library or find_by_legal_document, so the alternative-routing is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_mcp_connectionsList MCP connectionsARead-onlyInspect
List the external MCP connections configured for a project. Auth tokens are never returned (only whether one is set).
| Name | Required | Description | Default |
|---|---|---|---|
| projectKey | Yes | Project key, e.g. 'UK'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, non-destructive, closed-world), but the description adds real behavioral context: auth tokens are never returned, only a boolean indicating whether one is set. That materially changes what an agent can expect and prevents a pointless hunt for secrets.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero redundancy, with the security-relevant caveat front-loaded right after the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description only partially hints at return shape (the token-presence flag). For a simple one-parameter list tool with full annotation coverage this is nearly complete, though a note on what fields a connection record contains would close the last gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a single required projectKey already documented with an example, so the description adds no parameter meaning beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('external MCP connections') and scopes it to a project. The read-only counterpart to upsert_mcp_connection is unambiguous from the name and description alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: an agent can infer it should call this to inspect existing connections before calling upsert_mcp_connection, but the description never says so or names the alternative. No when-not guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pages_to_approveList pages to approveARead-onlyInspect
The wiki pages waiting on YOUR approval — what to answer when your person asks «what is waiting for my signature». A page is listed when its lead named you with ask_wiki_page_approval and no approval of yours stands on the edition you were asked about or a later one: approving takes it off, being asked again about a newer edition puts it back. Each row: 'pageId', 'title', 'spaceKey', 'projectKey' and 'projectName', 'askedBy' (display name) and 'askedByUsername', 'askedAt', 'askedFor' (the edition you were asked about), 'version' (the edition the page is at now — read that one before approve_wiki_page, which takes the version you read) and 'note'. Newest ask first; only pages you can open now. Questions put to you on issues are list_issue_questions.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and non-destructive, but the description adds substantial unannotated behavior: the exact inclusion predicate (you were named via ask_wiki_page_approval and no approval of yours stands on that edition or a later one), the dynamic re-listing after a newer ask, sort order (newest ask first) and the visibility filter (only pages you can open now). That is real operational context an agent cannot infer from structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose and the 'YOUR approval' scope are front-loaded, and each later clause (inclusion rule, ordering, row shape) carries distinct information. The parenthetical asides and the colloquial framing ('your person asks') add length but also real routing value; a slightly tighter list format would have earned a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates fully by enumerating every row field (pageId, title, spaceKey, projectKey/projectName, askedBy, askedByUsername, askedAt, askedFor, version, note) and flagging that 'version' is the one to read before approve_wiki_page. Nothing an agent needs 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero input parameters, so the baseline is 4; there is nothing for the description to compensate for. It does usefully document the return row fields, but that is an output concern rather than parameter semantics, so no upgrade above baseline is warranted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('wiki pages waiting on YOUR approval') and immediately disambiguates from the near-sibling 'list_issue_questions' at the end. An agent can tell this apart from get_wiki_page_approval or list_issue_questions without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit usage context ('what to answer when your person asks «what is waiting for my signature»') and routes issue-based questions to list_issue_questions. It also explains the lifecycle interplay with approve_wiki_page and ask_wiki_page_approval. It stops short of an explicit when-not-to-use exclusion versus get_wiki_page_approval, so a 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.
list_personsList personsARead-onlyInspect
A project's register of persons — the people its texts name — each with their spellings by script and form, each spelling's source and whether it is checked (see find_person), facts (born, died, wikidata, mathGenealogy, orcid, mrAuthor) the same way, and the project's note on why they are here. 'state' is 'confirmed', 'proposed' (found in the texts, waiting for a person — set_person with state decides it) or 'rejected'; proposed and rejected ones only to members who may write. 'reading' says whether the project has its texts read for persons. 'q' narrows to persons with a spelling holding those words. To a member who may write, 'similar' pairs two persons that look like one, with the two spellings and why — 'form' (the same up to the form of the words, «Гупта» / «Гупты»), 'letter' (one letter apart in a long Latin name, «Sjogren» / «Sjorgren»), 'transliteration' («Сьёгрен» / «Sjogren») or 'initials' («N. D. Gupta» / «Narayan D. Gupta») — a hint for the person to decide, never a fact: merge_persons only when they agree, distinct_persons when they say the two are different people — 'distinct' lists those answers. 'merged' lists the persons merged into one, whose spellings and facts are shown among its own with 'mergedFrom'. Only spellings whose source you may open; a person none of whose spellings you may see is not listed. Only where the company's plan includes AI.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Words a spelling holds, case aside. | |
| limit | No | How many to return, at most 200. Default 100. | |
| state | No | 'confirmed', 'proposed', 'rejected' or leave out for all you may see. | |
| offset | No | How many to skip — for the next page. | |
| source | No | Only persons read from this source: 'page:471', 'issue:KYC-12', 'comment:88', 'wikicomment:7', or 'none' for those written with no source. 'sources' in the answer lists them with counts. | |
| project | Yes | The project key, e.g. MATH. | |
| onlyUnchecked | No | true for only persons with a spelling or fact that is not checked — written from memory or no longer in its source. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, non-destructive and closed-world, yet the description adds substantial behavioral context beyond them: visibility is filtered by source permissions ('Only spellings whose source you may open; a person none of whose spellings you may see is not listed'), proposed/rejected entries are restricted to writers, and the tool is gated on the company's AI plan.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one dense paragraph mixing input filters, response fields, access rules and downstream actions. It is front-loaded with the core purpose, but the run-on parenthetical clauses make it harder to scan than a structured list would be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 return content — and it does extensively (spellings, facts, note, state, reading, similar, merged, distinct). It also covers permissions and plan gating. Minor omissions like pagination/limit bounds are handled by the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains q, limit, state, offset, source, project and onlyUnchecked. The description adds some interpretation of state visibility and q filtering, but most of its length is spent on response fields (similar, merged, distinct, reading) rather than input meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: a project's register of persons with their spellings, sources, facts and notes. It clearly belongs to the person-management family and names related tools (find_person, set_person, merge_persons, distinct_persons), though it does not explicitly say 'list/browse' versus 'look up one person' at the top.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides workflow context for '_state_' (confirmed/proposed/rejected) and for 'similar' hints, directing the agent to merge_persons/distinct_persons when appropriate. However, it never explicitly says when to call this listing tool instead of find_person or decide_persons, so the selection guidance is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_project_fieldsList project fieldsARead-onlyInspect
The columns a project keeps about its issues: name, kind, and a list's options with their colours. Also the customfield_… name each one answers to, for searching by JQL. Any member may read them.
| Name | Required | Description | Default |
|---|---|---|---|
| projectKey | Yes | Project key, e.g. 'CRM'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only, non-destructive, closed-world profile, so the bar is lower. The description still adds genuinely new behavioral context: 'Any member may read them' tells the agent no elevated permissions are required, which is not encoded in the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each contributing distinct information: the column model, the JQL identifier, and the access rule. Front-loaded with the resource definition and free of padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description must sketch the return shape, and it does: name, kind, option values with colours, and the customfield identifier. That is sufficient for an agent to know what it will get back, though it does not say whether the result is a flat list or grouped by field type.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter with 100% schema coverage and an inline example ('CRM'), so the schema carries the weight. The description only implies that results are scoped to one project and adds no format or lookup guidance for projectKey, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the specific resource (the columns a project keeps about its issues) and enumerates what each entry contains: name, kind, option list with colours, and the customfield_… identifier. It does not explicitly contrast itself with the sibling mutators set_project_field and delete_project_field, but the framing is unambiguously read-only enumeration.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the mention of the customfield_… name 'for searching by JQL' hints that this is the tool to call before building a JQL query, but it never states when to use this versus set_project_field, list_projects, or list_project_presets, and offers no explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_project_presetsList project presetsBRead-onlyInspect
The ready-made projects a project can take in one action: 'requirements', a register of what a company is obliged to do (an issue type, ten columns, a four-state workflow, the year's recurring compliance work, two page templates); 'agents', sample issues to hand to an agent and a «Project context» page it reads first; 'jira', a page on moving a project from Jira; and, where the company has the theatre switched on, 'season', a production type with anchor dates and two sample productions. Says what each brings, by name, before anything is taken.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true and destructiveHint=false already cover the safety profile, so the bar is lower, but the description reinforces non-mutation with 'before anything is taken'. It adds substantive domain context about preset contents (issue types, columns, workflows, templates) yet says nothing about output shape, ordering, or permission requirements for the theatre-gated 'season' preset.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Everything is packed into a single run-on sentence stitched together with semicolons and nested parentheticals, which makes it hard to scan. The preset inventory is useful, but the list would be far more legible as separate clauses, and the phrase 'theatre switched on' is unexplained jargon.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters, no output schema, and annotations covering safety, the description mainly needs to route the agent — and it half does, via the 'before anything is taken' hint. It omits the explicit hand-off to take_project_preset and gives no sense of what the response looks like (identifiers vs. prose), leaving a real gap for an agent that must pass a preset name onward.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; a baseline 4 would apply, but the description spends its text on preset payloads instead of confirming the no-argument, global nature of the call. It neither helps nor harms parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description frames the tool as enumerating 'the ready-made projects a project can take in one action', and the title supplies the verb 'List'. Each preset is named and characterized, so an agent can tell this is a catalog/discovery tool. It never explicitly contrasts itself with the take_project_preset sibling, which is the one tool it most needs to be distinguished from.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The closing clause 'Says what each brings, by name, before anything is taken' implies the intended sequence: inspect presets here, then apply one elsewhere. That is inference rather than guidance — take_project_preset is never named, and no condition for when-not-to-use is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_project_rulesList project rulesBRead-onlyInspect
A project's rules: when an issue enters a state, a checklist from a template is appended to its description. A rule appends its checklist to an issue's description when the issue ENTERS the rule's state — from the board, the Jira API or update_issue alike. The block starts with a hidden marker line '[//]: # (pm-rule:)'; while that line is in the description, entering the state again adds nothing (the journal says 'alreadyThere'). A [~username] in the template is a mention: that person is notified when the checklist lands. A checklist that would make the description too long is not added and the journal says 'tooLong'; the move itself still happens. 'trigger' says WHEN: 'entered' (the default — the issue entered 'status'), 'versionReleased' (a version it goes out in was marked released), 'subtasksDone' (every issue under it is finished — the rule acts on the PARENT) or 'subtaskStarted' (an issue under it was taken into work — the parent again); or what the project's repository said through its webhook: 'branchCreated' (a branch naming the issue was made), 'mrOpened', 'mrMerged' or 'mrClosed' (a merge request — a pull request on GitHub — naming the issue was opened, merged, or closed without merging). An issue is named by its key in the branch, the title or the description, and only this project's issues are touched. 'branch' narrows the three merge-request events to a request going INTO that branch, e.g. 'main'. Nobody is behind a webhook, so such a rule acts as whoever last saved or switched it on, whatever its action. 'deployed' fires when a pipeline reports that the issue went out to an environment (report_deployment); 'environment' narrows it to one of the project's environments by name, e.g. 'staging'. 'actChanged' fires on the issues that cite a legal act when its publisher's text changed, and 'actTouched' only on those where the change is in the place they cite (or that cite the act as a whole) — found once a week, only in a project with the «Legal acts» add-on; 'claimBasisChanged' fires on the issues that cite a claim ([thm:…], [claim:…]) whose legal basis is such an act, once per new text and claim; nobody is behind a publisher either, so these act as the rule's owner too. Only 'entered' has a 'status'; pass an empty one for the others. 'fromStatus' narrows any of them to an issue coming from that state: the state it has just left for 'entered', the state it stands in for the rest. A rule with action 'move' MOVES the issue to 'moveToStatus' instead of appending anything, and has no template (pass an empty one). The move is an ordinary one — made as whoever last saved or switched on the rule, asked of the project's workflow, written to the history with the rule's name, and followed by the rules of the state it lands in. A workflow that refuses it leaves a 'moveRefused' line with the reason in the journal and nothing else; 'moved' is a move made; 'tooDeep' is a move not made because rules had already moved issues three times off one event. A rule with action 'agent' is a DUTY instead: it says which issues may be handed to an agent role (agentRole, e.g. 'product') and what the agent may do with them. Its 'template' is then the INSTRUCTION — what doing such an issue means in this project — and nothing is appended anywhere. A duty may have no state (pass an empty 'status'): then an issue is handed only by a person. agentActions is a list from: describe, subtasks, ask, wiki, report, support, jira (propose a move or a comment in the project's linked Jira, applied by a person). agentFields names the fields it may set: priority, labels, duedate, or the project's own fields by name. doneStatus is the state it moves the issue to when done — never a finished one. capUsd raises what one task may cost, up to 5 dollars. Commenting is always allowed; finishing, deleting, reassigning and anything outside the issue never are. Saving or switching on a duty makes it yours: it runs on your behalf and access, and is switched off if you lose the project. Answers with each rule's id (the other rule tools take it), action, trigger, state, conditions (type, label, fromStatus, branch — null means any), template, moveToStatus and whether it is on, and for a duty its 'agent' part; with the state and type names, the triggers and the actions a rule may use, the agent roles, actions and fields a duty may name where agents are on; and 'canEdit'. Any member may read them.
| Name | Required | Description | Default |
|---|---|---|---|
| projectKey | Yes | Project key, e.g. 'ONB'. |
TDQS
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 meaningful context beyond annotations: it summarizes the returned fields, states that any member may read rules, and explains rule semantics around triggers, matching, ownership, and journal outcomes. It does not, however, describe ordering, pagination, or filtering behavior for the listing itself.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely long and front-loads a dense domain explanation of rules, triggers, webhook events, duties, and journal statuses before reaching what the tool actually returns. For a simple one-parameter read/list operation, much of this text is not tightly scoped to the tool's purpose, and the actual listing behavior is buried near the end.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does useful work by summarizing the returned fields: rule id, action, trigger, state, conditions, template, moveToStatus, whether it is on, agent details where applicable, and canEdit. It also states the permission model. It is missing only minor list-operation details such as ordering/pagination, which keeps it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is only one parameter, projectKey, and the schema already documents it at 100% coverage as 'Project key, e.g. ONB.' The description does not mention the parameter or add any project-key-specific semantics, so it neither compensates for nor improves on the schema. Baseline 3 is appropriate for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description eventually indicates retrieval via 'Answers with each rule's id...' and 'Any member may read them,' but it never opens with a clear verb+resource statement like 'List all automation rules for a project.' The bulk of the text explains rule semantics rather than the tool's own action, making the purpose inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It mentions that 'the other rule tools take' the returned id and that any member may read rules, but it gives no explicit guidance on when to use this tool versus create_project_rule, update_project_rule, delete_project_rule, or get_project_rule_runs. No when/when-not conditions or alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsList projectsARead-onlyInspect
List the projects visible to this token (a project-scoped token sees only its project). A project with a 'parent' is a subproject of that one: it has its own issues, board and wiki, and shares only who may reach it.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and destructiveHint, so safety is covered. The description adds useful behavioral context beyond annotations: token-based visibility and the fact that subprojects have their own issues, board, and wiki while sharing only access control.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two well-structured sentences that front-load the action and then explain the subproject relationship. Every sentence adds relevant information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter, read-only listing tool with no output schema, the description covers the main contextual concern: visibility scope and subproject semantics. It does not mention ordering or pagination, which is a minor gap for a list operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter semantics burden. Baseline for a zero-parameter tool is 4, and the description does not need to describe inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'List the projects visible to this token.' It also distinguishes project-scoped tokens from broader visibility, so an agent can tell this apart from creation or project-detail tools such as create_project or list_project_fields.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for when this tool applies: retrieving projects accessible by the current token, including the project-scoped-token edge case. It does not explicitly say when not to use it or name an alternative, which keeps it below 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_registry_embedsList registry embedsCRead-onlyInspect
A project's terms and claims put on other sites (PM-1165–PM-1168), and its sets: for each, its id, 'kind' (term, claim or set), 'name' (the term's word, the claim's label, the set's name), the ready code — 'script' (the cloud's script, once per page), 'mark' (the words on the site that open the cloud) and, for one thing, 'iframe' (a card) and 'url' — the sites allowed to show it (empty is any), the term ('expiresAt', null until removed), who made it and when, and how many times it was opened. A set lists what it names in 'items'; a term on it you may not open is only counted in 'hidden'. Only for somebody who may write in the project.
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | The project key, e.g. MATH. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly/non-destructive/closed-world, so the bar is lower, and the description still contributes the write-permission gate and behavioral detail on the data itself (allowed-sites empty means any, 'expiresAt' null until removed, hidden items counted but not shown, 'script' emitted once per page). It omits ordering and pagination, but the authorization and data-visibility behavior are genuine additions beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The whole definition is one sprawling run-on sentence whose middle is a parenthetical field dictionary ('its id, "kind" ..., "name" ..., the ready code — ...'). The one actionable constraint, the write-permission requirement, is buried at the very end instead of being front-loaded, so structure works against scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does need to explain return shape and it attempts that comprehensively (kinds, ready codes, sites, expiry, creator, open counts, set items, hidden). But the field meanings are phrased so cryptically that an agent will struggle to map them to actual response keys, and ordering/pagination are unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter 'project' is documented in the schema with an example key ('e.g. MATH.'). The description says the scope is 'a project's ...' but adds no format, casing, or error behavior beyond what the schema already supplies, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description does identify the resource — a project's embeds (terms/claims placed on other sites) and embed sets — which separates it from the create_*/update_*/delete_* embed siblings by listing intent. But the first clause elides its verb entirely ('A project's terms and claims put on other sites ... and its sets:'), so the agent must reconstruct that this is a read/list operation from the tool name rather than the prose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is a real constraint stated — 'Only for somebody who may write in the project' — which tells the agent about authorization context. However, nothing says when to choose this over list_wiki_embeds, list_terms, or list_claims, and nothing warns about the empty-result case or what happens for a project the caller merely reads.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_repositoriesList repositoriesARead-onlyInspect
The GitHub and GitLab repositories a project is connected to: each one's id, host, path and address, whether it is the project's open source repository (with the licence its host named and when that was last confirmed), whether a token is set (never the token), whether agents may read its code, and whether a webhook is set. Also whether the project itself is open source and public, whether you may change the list, and the screen where a token is given. Any member may read it.
| Name | Required | Description | Default |
|---|---|---|---|
| projectKey | Yes | Key of the project, e.g. 'LIB'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. Beyond that, the description adds real behavioral context: tokens are never returned, only whether one is set, the caller's own change permission is reported, and the licence confirmation timestamp is included. It omits return ordering, pagination (if any) and the empty-list behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content is largely justified because there is no output schema and return shape must be described. However, it is delivered as one sprawling multi-clause sentence, mixing return fields with permission facts and a UI pointer, with no front-loaded summary of the operation itself, which hurts scanability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does the necessary work of explaining what comes back, down to licence attribution and webhook/token presence. It still lacks ordering, volume and what an empty result means, and offers no pointer to the connect/set tools an agent would likely need next.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter with 100% schema description coverage ('Key of the project, e.g. LIB'), so the schema carries the full burden. The description adds nothing about projectKey or how to obtain it, which is the baseline-3 case rather than a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the specific resource (the GitHub and GitLab repositories a project is connected to) and enumerates the fields returned, so an agent knows exactly what it gets. It never mentions the siblings that mutate this same list (connect_repository, set_repository_open_source), so it is clear but not differentiated from alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'Any member may read it' tells the agent who is permitted, which is genuinely useful context, but there is no explicit statement of when to call this versus connect_repository or list_code, nor any precondition such as the project needing an existing connection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_secret_filesList secret filesARead-onlyInspect
List the secret files on an issue or a wiki page that this token's person reads — the title its author gave it, the size, who reads it, who is waiting for a key, and whether the key is due a change. Never the contents or the file's own name: they are encrypted on the readers' devices and this server cannot open them, so neither can you through it. Pass issueKey or pageId.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | No | Wiki page id. | |
| issueKey | No | Issue key, e.g. 'UK-1'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses exactly what metadata is returned (title, size, readers, key waiters, key rotation status) and, critically, that contents and the file's own name are never returned because they are encrypted client-side. This is meaningful behavioral context that annotations do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, all front-loaded: what it lists, what it never returns, and how to scope the call. Every sentence adds distinct information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, non-destructive list tool with no output schema, the description covers the returned fields, the security/encryption limitation, and the required scoping parameters. Only minor operational details like ordering or pagination are absent, which are not essential for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already documented, and the baseline would be 3. The description adds value by clarifying that either issueKey or pageId should be supplied, which matters because the schema marks both optional with null defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('List the secret files') and scopes it to an issue or wiki page visible to the token's person. It clearly separates this from siblings like get_secret_file_journal or list_credentials by stating exactly what is listed and where.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for when the tool applies (issue or wiki page the token's person reads) and instructs 'Pass issueKey or pageId.' It does not explicitly name alternative tools or exclusions, so it falls short of the top-tier when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_showcaseList showcaseARead-onlyInspect
What a public project shows of the company's OTHER projects: issues and wiki pages shown there by reference, not copied — anybody who reads the public project reads them as they are now, while the rest of their project stays closed and their links to it are counted, never named. Each row: its id (for remove_from_showcase), whether it is an issue or a page, its key or page id, its title and the project it belongs to; for a page its edition — 'current', or 'approved' with the version in force (null while none stands, and then it shows nothing). Whoever manages it also sees rows that show nothing now, with shown: false. Also whether you may add to it.
| Name | Required | Description | Default |
|---|---|---|---|
| projectKey | Yes | Key of the public project, e.g. 'D5'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only annotations, the description discloses rich behavioral context: showcase entries are references not copies, public readers see live referenced content while the source project stays closed and links are anonymized, managers also see rows with shown: false, and the response includes an add-permission signal. This is substantive behavioral information that annotations alone would not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is information-dense and front-loads the core concept, but it is written as a long, comma-spliced block with multiple embedded clauses. Most content earns its place, yet the structure could be clearer and easier to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does a good job explaining the returned row fields, the page edition semantics, the shown:false manager view, and whether the caller may add entries. It lacks ordering or pagination details, but is otherwise complete for invoking and interpreting this read-only list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is only one parameter, projectKey, and the schema already covers it at 100% with an example ('D5'). The description does not add syntax or format details for the parameter beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the specific resource and scope: what a public project exposes from other projects via showcase, including issues and wiki pages shown by reference. It distinguishes the listing from add/remove workflows by noting that row ids are for remove_from_showcase and that the response indicates whether the caller may add, though it never states a direct verb like 'List'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the reference to remove_from_showcase and the 'whether you may add' permission signal, but there is no explicit when-to-use guidance, no named alternative for viewing the showcase, and no when-not-to-use condition. The agent can infer the tool's role but must connect it to siblings itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sourcesList sourcesARead-onlyInspect
A project's sources — the papers, books and preprints its pages cite — each with its key (what a page cites it by, e.g. 'IMP26', a BibTeX key), its authors (the name as the work prints it, and 'personId'/'person' where it is a person of the project's register — 'hidden' where you may not see that person), title, year, venue (journal or publisher), identifiers ('arxiv' with its version, 'doi', 'mr', 'zbmath', 'isbn'), its PDF ('pdf': an attachment of an issue or a page, with its address — or 'hidden') and how far it is checked. 'check' is 'unchecked' (nobody checked it), 'api' (a service — arXiv, Crossref, zbMATH Open — agreed with it), 'mismatch' (it disagrees with what it names; 'checkNote' says how) or 'manual' (a person checked it against the original; 'checkedBy'). 'dagger' is true for unchecked and mismatch: the † a bibliography marks such a reference with. Read a work's description here rather than from a page's own list. Ordered by key. Anybody who sees the project.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Words its key, title, venue, an author's name or an identifier holds, case aside. | |
| check | No | Only sources so checked: unchecked, api, mismatch, manual — or 'dagger' for unchecked and mismatch together. | |
| project | Yes | The project key, e.g. MATH. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false), and the description adds substantial context on top: 'hidden' values where the caller cannot see a person or PDF, the visibility rule 'Anybody who sees the project', and the ordering 'Ordered by key'. It omits any hint about result size or pagination, which is the remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The resource is stated first, but the rest is a single tangled sentence with nested parentheticals (e.g. "its authors (the name as the work prints it, and 'personId'/'person'...)") that is hard to scan. The information is useful, but the format costs readability for a three-parameter list tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing the returned shape, and it does so field by field (key, authors, title, year, venue, identifiers, pdf, check, dagger). Only pagination/result-size behavior is unaddressed, which for a project-scoped list is a minor omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description earns more by interpreting the semantics: it spells out what each 'check' value means in domain terms (arXiv/Crossref/zbMATH agreement, 'checkNote', 'checkedBy') and defines 'dagger' as the union of unchecked and mismatch. This gives the agent the notion needed to choose between check values rather than just their names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It names the resource precisely ('a project's sources — the papers, books and preprints its pages cite') and enumerates the fields returned, so an agent knows exactly what it gets. It does not explicitly contrast with get_source or delete_source, but the plural list semantics are unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Read a work's description here rather than from a page's own list' is an explicit routing instruction against an alternative the agent would otherwise choose. It stops short of naming sibling tools (e.g. get_source for a single work) or stating prerequisites beyond the visibility rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_support_lettersList support lettersARead-onlyInspect
List letters to the support address that did not become part of a request: 'held' (looked like spam, or too many at once from one address or on one request), 'failed' (we could not file them), 'ignored' (an autoresponder, a bounce, a mailing list, our own letter), 'dismissed'. Without 'state', held and failed — the ones waiting for a person. Each has an id, the reason, the sender, the subject and the file names. Only a full member of the support project may read them: they are strangers' words.
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | One of 'held', 'failed', 'ignored', 'dismissed'. Omit for held and failed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the readOnly/non-destructive annotations by disclosing the authorization requirement ('Only a full member of the support project may read them'), the sensitivity of the content, and exactly which fields come back (id, reason, sender, subject, file names).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the scope and the default behavior, then the return fields, then the access caveat. Dense but nearly every clause carries information; the closing 'they are strangers' words' is flavor, though it does reinforce the privacy stakes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description supplies the returned fields itself, plus the authorization rule and the state taxonomy. Nothing needed to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, but the description still adds real meaning: it explains each state value ('held' = spam or too many at once, 'failed' = could not file, 'ignored' = autoresponder/bounce/mailing list, 'dismissed') rather than merely listing them. The default behavior is restated with its rationale.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (list) and a precisely bounded resource: letters to the support address that 'did not become part of a request'. The negative definition of scope implicitly separates it from list_support_queue and get_support_letter without the agent needing either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly documents the default behavior when 'state' is omitted ('held and failed — the ones waiting for a person'), which is the key selection decision for this tool. It does not name a sibling alternative or state when to prefer list_support_queue, 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.
list_support_queueList support queueARead-onlyInspect
The support desk's queue: open requests, the most urgent first — overdue, then due soonest, then those waiting on their requester. Each item says whose turn it is ('clock.turn': 'first' = nobody has answered yet, 'reply' = the requester wrote again, 'requester' = we answered last and the clock is stopped), since when it has waited, the working hours waited, when the answer is due and whether it is 'onTime', 'dueSoon' or 'overdue'; plus the assignee. 'numbers' has the current counts and, over the last 30 days, the median time to a first human answer and to resolution (in working hours — weekdays only) and the share answered within the promise. An automatic acknowledgement or automatic answer is never counted as an answer; 'numbers.auto' says how many requests the automatic answer got, how many were then resolved with no human reply and no further word from the requester ('settled'), and how many requesters wrote again after it ('askedAgain') — per rule too. An item's 'autoRule' is set when the request got an automatic answer. Readable by anybody who can read the support project.
| Name | Required | Description | Default |
|---|---|---|---|
| who | No | 'all' (default), 'mine' (assigned to you) or 'unassigned'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a safe read-only, non-destructive, non-open-world operation, and the description adds substantial context beyond them: ordering rules, access requirements ('readable by anybody who can read the support project'), and the exact semantics of clock.turn, numbers, and auto fields. It stops short of stating pagination, limits, or response size, which are the main behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The critical fact—this is the open support queue sorted most urgent first—is front-loaded. The rest is dense but mostly earns its place by explaining field semantics for a tool with no output schema, though the single run-on paragraph with nested quotes and parentheticals is harder to scan than it needs to be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so thoroughly: ordering, clock.turn states, numbers/auto metrics, and access permissions. It is close to complete, with only pagination and response-size behavior left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single 'who' parameter is fully documented in the schema, so the baseline is 3. The description itself never mentions the who filter or how it interacts with the queue, adding no meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and scope: the support desk's queue of open requests, sorted by urgency. It is clear what the tool returns, but it never names or contrasts with siblings like get_support_request, so an agent must infer the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'the support desk's queue: open requests' and by the final note on who can read it, but there is no explicit when-to-use guidance, no exclusions, and no pointer to get_support_request for individual requests or to other support tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_termsList termsARead-onlyInspect
A project's terms: each word, its other spellings, its short definition, its kind, and its source (a wiki page or an issue, with the heading on it). 'state' is 'confirmed' (shown to readers, marked in texts), 'proposed' (found on a page by its markup or by the model, waiting for a person — set_term with state 'confirmed' or 'rejected' decides it) or 'rejected' (kept so it is not offered again). Proposed and rejected ones are listed only to members who may write. Only terms whose source you may open. 'uses' is how many times the project's pages and issues use the term by any spelling (null: not counted yet); the most used come first, a page at a time — 'total' says how many there are. To a member who may write, 'similar' pairs a term of this page with another that looks like it up to the form of its words (plural, case) — merge_terms joins them if the person agrees. Only where the company's plan includes AI.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Only these kinds, comma-separated — 'статус,система'; an empty one ('статус,') also takes terms with no kind. 'kinds' in the answer says which there are. | |
| limit | No | How many to return, at most 200. Default 100. | |
| state | No | 'confirmed', 'proposed', 'rejected' or leave out for all you may see. | |
| offset | No | How many to skip — for the next page. | |
| source | No | Only the terms of one source — 'page:471', 'issue:KYC-12', or 'none' for the terms with no source. 'sources' in the answer says which there are, with how many. | |
| project | Yes | The project key, e.g. KYC. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a safe read, but the description adds substantial operational context: permission-scoped visibility of proposed/rejected terms and of terms by source, ordering by usage with paging and a 'total' count, null 'uses' meaning not-yet-counted, and 'similar' being gated on write membership plus an AI-plan entitlement. These are non-obvious behaviors an agent could not infer 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Information-dense with no filler sentences, and the most decision-relevant facts (what is returned, state meaning, visibility) come early. The opening is a noun phrase rather than an action statement, and several clauses are nested inside dashes and parentheses, which makes first-pass parsing harder than it needs to be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the return-shape burden and does it: it documents 'total', 'kinds', 'sources', 'uses' (including the null case) and 'similar'. Combined with the annotation-covered safety profile and the 100%-covered input schema, an agent has enough to call this and interpret the response without guessing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3; the description goes beyond it by unpacking the domain meaning of the 'state' values (confirmed = shown to readers and marked in texts; rejected = kept so it is not offered again) rather than merely restating the enum. It also explains the ordering and page semantics tied to 'uses'/'total'. 'kind' and 'source' syntax are left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening states the resource ("A project's terms") and enumerates exactly what each record carries — word, spellings, definition, kind, source — so an agent knows what a call yields. It is clearly distinguishable from mutation siblings like set_term and merge_terms, which are mentioned by name as follow-up actions. What it lacks is an explicit verb-forward framing ("Lists...") and any contrast with term_graph or list_sources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives real situational guidance: filter by 'state', and the note that set_term with 'confirmed' or 'rejected' decides a proposed term, plus merge_terms joining 'similar' pairs when a person agrees. Visibility constraints ("Only terms whose source you may open", "listed only to members who may write") further tell the agent who will see what. It stops short of stating when to prefer term_graph over this list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tracksList tracksARead-onlyInspect
The tracks a project is cut into: a track is a LABEL the project declared meaningful — a play, a campaign, a rollout — and work joins one by carrying that label. A track has no key of its own; its issues keep the project's key, which is what makes it a different thing from a subproject (a separate project, see create_project's parentKey). Any member may read them.
| Name | Required | Description | Default |
|---|---|---|---|
| projectKey | Yes | Project key, e.g. 'TH'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a read-only, non-destructive, closed-world operation. The description adds useful behavioral context beyond annotations: tracks are label-based, have no independent key, and are readable by any member.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably compact and each sentence contributes conceptual context, especially the distinction from subprojects. It is not front-loaded with the action verb, but it avoids repetition and stays focused on the resource model.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read-only list tool, the description provides enough context: what a track is, how it differs from a subproject, and who can read it. With annotations covering safety and no output schema to explain, no critical agent-facing gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the single projectKey parameter is already documented in the schema with an example. The description reinforces that the project key is the project's own key, but adds no syntax, format, or filtering semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as project tracks and explains the concept with concrete examples (play, campaign, rollout). It also distinguishes tracks from subprojects, though it does not open with an explicit verb like 'lists' and does not directly contrast with set_track/remove_track.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the tool name and by the statement that members may read tracks, but the description does not explicitly say when to call this versus set_track, remove_track, or list_projects. The subproject contrast provides some alternative-oriented context but is not full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_usersList usersARead-onlyInspect
List the people you can assign work to or mention: the members of the projects this token can see. Optionally filter by free text (username, display name or email) or narrow to one project. Mention someone in a description or comment as [~username] — a mention matches the username, never the display name — and pass the same username (or the email) as 'assignee'.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Free text to match in username, display name or email. | |
| limit | No | Max users to return (default 50, max 200). | |
| projectKey | No | Restrict to members of this project key (must be visible to the token). | |
| includeInactive | No | Include deactivated accounts, which can be neither assigned nor mentioned. Off by default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a safe read-only, non-destructive operation. The description adds useful behavioral context: visibility is limited to projects the token can see, mentions must use the username rather than display name, and the same username or email can be used as an assignee. It does not cover ordering or response shape, but the annotations reduce that burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and the description is reasonably compact. The final sentence about mention syntax and assignee usage is useful but slightly long and drifts into cross-tool guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only listing tool with rich annotations and fully described parameters, the description covers scope, filters, mention syntax, and assignee reuse adequately. It does not describe return fields or ordering, but no output schema exists and the core behavior is clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all four parameters are already documented in the schema. The description reinforces text filtering and project narrowing but does not add much parameter-level meaning beyond the schema, and it omits the limit and includeInactive parameters that the schema explains.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('List the people') and defines the exact scope: members of projects visible to the token who can be assigned or mentioned. This is more specific than a generic 'list users' and helps distinguish it from broader people-related tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly indicates the intended use case (finding people to assign or mention) and explains optional filtering. However, it does not explicitly name alternatives such as list_persons or find_person or state when those should be preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_versionsList versionsARead-onlyInspect
A project's versions, in their sequence. A version is what a project's work goes out in — '2.4.0', 'Autumn'. It is the project's own: an issue carries versions of its own project only, any number of them ('fixVersions' on create_issue, update_issue and get_issue; JQL 'fixVersion = "2.4.0"', 'fixVersion in unreleasedVersions()'). Each with its id, name, description, startDate and releaseDate (YYYY-MM-DD), whether it is released or archived (put away: still on its issues, no longer offered), 'overdue' (its day has passed and it has not shipped), and how many issues it carries — 'issues' — and how many of those are not finished — 'open'. Also 'canEdit': whether you may make, change and release versions here. Any member may read them.
| Name | Required | Description | Default |
|---|---|---|---|
| projectKey | Yes | Project key, e.g. 'ONB'. | |
| hideArchived | No | Leave out the versions that are archived. They are listed by default, since an issue may still carry one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true, openWorldHint=false, and destructiveHint=false, so the bar for behavioral disclosure is lower. The description adds useful context beyond annotations: read permission, archived semantics, overdue meaning, issue/open counts, and canEdit, though it omits pagination or rate-limit behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence is front-loaded and useful, but the description is a dense paragraph that includes JQL examples, fixVersions references, and extensive field explanations. For a simple two-parameter list tool, some content exceeds what is needed to invoke it correctly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple 2-parameter read shape, no output schema, and annotations that cover safety, the description is complete enough. It explains the returned fields, permission model, archived/overdue semantics, and canEdit, so an agent has the context needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented in the schema. The description reinforces project scoping and archived semantics but does not add syntax or formatting details 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource and scope clearly: a project's versions in sequence, with examples and field details. It never uses an explicit list verb and does not differentiate itself from siblings such as create_version, update_version, or release_version, so it is clear but lacks sibling-level distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance or named alternative. References to create_issue, update_issue, get_issue, and JQL explain version relationships rather than when to call list_versions instead of another tool. Only the permission note 'Any member may read them' provides adjacent contextual guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_wiki_embedsList wiki embedsARead-onlyInspect
The scenes of a wiki page — or of every page of a space you may edit — put on other sites (PM-1076): for each, its id, the block ('language' anim or anim-js and its number among that kind's blocks, as get_wiki_page's 'anims' numbers them), the link and the ready code, the caption, the sites allowed to frame it (empty is any), the term ('expiresAt', null until removed), who made it and when, and how many times it was opened. Only for somebody who may edit the page; give 'id' for one page or 'spaceKey' for the space.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Page id. Give this or spaceKey. | |
| spaceKey | No | Space key, for every page of it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/non-destructive/closed-world, so the bar is lower, and the description still adds meaningful context: the edit-permission gate, the full field set returned, that an empty allowed-sites list means any site, and that 'expiresAt' is null until removed. It stops short of ordering, pagination, or behavior when no embed exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Only two sentences and nothing is wasted — the long return-field enumeration is load-bearing because there is no output schema. The first sentence is nevertheless a ~90-word run-on that packs scope, fields and cross-references together, making the core purpose slower to extract than it should be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a 2-param schema, full description coverage and no output schema, the description covers what an agent needs: permission requirement, param choice, and the shape of each returned item including the tricky 'block'/'language' numbering and the expiresAt semantics. Missing only edge behavior (neither param given, no embeds present) and ordering.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented by the schema itself, establishing a baseline of 3. The description restates the id/spaceKey choice without adding format or precedence rules, and its reference to get_wiki_page's 'anims' numbering explains the returned 'block' value rather than the inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (wiki embeds put on other sites) and its two scopes (one page, or every page of a space), which cleanly separates it from get_wiki_page, create_wiki_embed, update_wiki_embed and delete_wiki_embed. The verb 'list' is only implied by the title rather than stated, and the opening noun phrase is dense, but an agent can still tell what it returns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Only for somebody who may edit the page; give id for one page or spaceKey for the space' gives a real permission prerequisite and the parameter-selection rule. It never states when to reach for this versus get_wiki_page, list_wiki_spaces or search_wiki, and there is no guidance on what happens if both or neither key is supplied, so usage is implied rather than fully routed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_wiki_labelsList wiki labelsARead-onlyInspect
The labels of one wiki space with how many pages carry each, most used first — counted over the pages visible to this token. service marks a label that does a job rather than describe a page ('template'). search_wiki with label lists a label's pages.
| Name | Required | Description | Default |
|---|---|---|---|
| spaceKey | Yes | The space key, e.g. 'PM'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, non-destructive, closed-world, so the safety bar is low; the description still earns credit by disclosing that counts are scoped to pages visible to this token (a real permission-dependent behavior) and that ordering is by usage descending. It omits any cap on the number of labels returned, which is the main remaining behavioral unknown.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences plus a parenthetical; every clause carries information (order, scope, service-flag semantics, follow-up tool) with no filler. It is front-loaded on the resource, though the leading noun phrase is slightly less scannable than a verb-first opening.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with no output schema, the description covers the return shape (labels plus per-label counts, sorted), the scoping rule, and the natural next call. Only the absence of any mention of result-size limits or empty-space behavior keeps it from full completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single parameter with 100% schema description coverage, so the schema already explains spaceKey. The description reinforces that the listing is confined to one space but adds no syntax or format detail beyond the schema's 'e.g. PM' example. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the exact resource (labels of one wiki space), what each entry carries (page counts), the ordering (most used first), and the visibility scope (pages visible to this token). The closing pointer to search_wiki delineates it from the tool that reads a label's pages, so it is unmistakable next to the many wiki siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It routes the agent forward explicitly: 'search_wiki with `label` lists a label's pages,' which clarifies this is the discovery step and search_wiki the consumption step. It also flags the `service` marker so the agent knows how to interpret non-descriptive labels. It stops short of naming when not to use it (e.g. vs. list_wiki_spaces), so not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_wiki_spacesList wiki spacesARead-onlyInspect
List the wiki spaces visible to this token. Every project has exactly one space, keyed like the project.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false and destructiveHint=false, so the safety profile is covered. The description adds genuinely new context: results are scoped to the caller's token permissions and the cardinality/keying invariant (one space per project) is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler; the scope statement is front-loaded and the keying invariant follows as supporting detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only list tool with annotations covering safety, the description supplies everything an agent needs: what is listed, whose visibility applies, and how results are keyed. No output schema exists, but the 'keyed like the project' note gives the agent the shape it needs to proceed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline of 4 applies. The description correctly implies no filtering arguments are available, consistent with the empty input schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List the wiki spaces') plus a scope qualifier ('visible to this token'), and adds the structural fact that spaces map one-to-one to projects. This is enough to distinguish it from search_wiki and list_wiki_embeds, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is the discovery entry point for wiki navigation because spaces are keyed by project. There is no explicit when-to-use, when-not-to-use, or pointer to search_wiki for cross-space lookup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
local_files_setupLocal files setupARead-onlyInspect
How the person connects pm-files — a small local MCP server that attaches files from their own computer to issues and wiki pages by path, and saves attachments back to files, so no bytes pass through the conversation. Call it when you need a local file (a screenshot, a document, anything past the base64 ceiling) and pm-files is not among your tools: hand the person the command for their client, with this workspace's address already in it. It never contains a token, and you must never ask for one — the command takes it from the person's clipboard. Changes nothing.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only and non-destructive annotations, the description discloses important security and operational behavior: no bytes pass through the conversation, the command never contains a token, and the agent must never ask for one because it comes from the clipboard. That is meaningful context for a setup/help tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose, followed by the call condition and security constraints. It is somewhat dense but every sentence contributes useful setup guidance, token-handling rules, or scope clarification.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, no output schema, and annotations that already declare it as read-only and non-destructive, the description covers what the tool is, when to call it, and the crucial token/security constraints. Nothing else is needed for an agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters and the schema is empty, so there are no parameter semantics to explain. The description does not need to compensate for missing parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states exactly what the tool does: provides the person with the command to connect the pm-files local MCP server for attaching files by path and saving attachments back to files. It names the concrete trigger and distinguishes this setup step from attachment-related siblings like add_attachment and get_attachment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit when-to-use condition: call it when a local file is needed and pm-files is not already among the agent's tools. It also specifies the alternative situation implicitly by requiring that pm-files be absent, and describes what to hand the person.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_chat_readMark chat readAInspect
Say you have read a chat up to a message — the newest when upTo is omitted — as opening it on the screen does: its unread count goes down on every screen you have open, and the push and letter waiting about it are not sent. Never moves backwards.
| Name | Required | Description | Default |
|---|---|---|---|
| upTo | No | The last message read. Default: the newest. | |
| chatId | Yes | The chat's id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnlyHint=false and destructiveHint=false; the description goes well beyond by disclosing the concrete side effects: unread counts decrement across every open screen, and pending push notifications and letters are not sent. The monotonic constraint 'Never moves backwards' is a non-obvious behavioral guarantee an agent could not get from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence with the core action front-loaded, followed by the effect and then the constraint. The em-dash aside carries the upTo default without a separate clause; no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation with no output schema and minimal annotation coverage, the description supplies the missing behavioral picture (side effects, notification suppression, monotonicity). Only an explicit pointer to the read/listing siblings would add meaningful value.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented, including upTo's default of the newest message. The description's restatement of that default adds little beyond the schema, though 'never moves backwards' hints that upTo beyond the current read point is a no-op.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb+resource ('read a chat up to a message') and describes the effect in concrete terms (unread count drops, notifications suppressed). It does not explicitly distinguish itself from related siblings such as get_chat_messages or mark_wiki_page_read, but the operation is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the conditional framing 'Say you have read a chat up to a message' and the analogy to opening it on screen, but no sibling or alternative is named, and there is no explicit when-not-to-use guidance. An agent can infer the context but must do the work itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_wiki_page_readMark wiki page readAInspect
Mark a wiki page as READ, IN YOUR OWN NAME: «I have read this edition». 'version' is the edition you read and must be the one get_wiki_page_reading gives as 'edition' — the call is refused when the edition to read is another one. Only for somebody the page is required reading for. The mark is a line in the page's journal — who, when, which edition — and is never changed or removed. It is a person's statement: make it when your person told you they have read the page, not because you fetched its text.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Page id. | |
| version | Yes | The edition that was read: 'edition' from get_wiki_page_reading. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say it is a non-read-only, non-destructive write; the description adds the substantive behavior: refusal when 'version' does not match the current edition, append-only permanence ('never changed or removed'), and that the record captures who/when/which edition. That is exactly the extra context annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and the identity constraint, then the failure mode, then eligibility, then semantics. Slightly dense with the quoted phrasing, but every clause carries operational meaning rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter write tool with no output schema, it covers the action, the identity requirement, eligibility, the failure condition, and the immutable recording model. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description goes further by constraining 'version' to the 'edition' value returned by get_wiki_page_reading and explaining the refusal consequence of a mismatch. 'id' gets no added semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Mark a wiki page as READ'), plus a distinguishing scope qualifier ('IN YOUR OWN NAME'). It is unmistakably different from get_wiki_page_reading or set_wiki_page_readers, which an agent could otherwise confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('make it when your person told you they have read the page'), explicit when-not ('not because you fetched its text'), a prerequisite ('Only for somebody the page is required reading for'), and routes to the sibling that supplies the required value.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
merge_personsMerge personsADestructiveInspect
Merge one person of a project's register into another when they are one human being — «Sjorgren» into «Sjogren». ASK the person first, naming both as list_persons shows them: 'similar' there is only a hint. Nothing is removed: the one merged keeps their spellings and facts with their sources, and from then on find_person, list_persons and the marks answer the other for any of their spellings. unmerge_person undoes it. Into a person already merged is into the one they were merged into; a rejected person is not merged into. Both journals keep a line. Members of the project who may write only. Only where the company's plan includes AI.
| Name | Required | Description | Default |
|---|---|---|---|
| from | Yes | The person merged, as list_persons returned them. | |
| into | Yes | The person who stays. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description explains that nothing is removed, that the surviving person keeps spellings and facts with sources, and that find_person, list_persons, and marks will answer for any spelling afterward. It also covers chained merges, rejected-person handling, journal lines, write-access requirements, and the AI plan requirement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose and prerequisite are front-loaded, and each sentence carries relevant information. Some phrasing is dense or slightly cryptic, such as 'Both journals keep a line,' but the description remains efficient for a tool with this many behavioral edge cases.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, permission-gated mutation tool with no output schema, the description is unusually complete: it covers semantics, reversibility, lookup consequences, access control, and edge cases. An agent has what it needs to decide whether to call it and how to use the two integer parameters correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the two parameters are already documented as the person merged and the person who stays. The description adds useful semantic nuance by tying the parameters to list_persons output and clarifying that merging into an already-merged person resolves to the ultimate survivor.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise verb and resource: merge one person of a project's register into another when they are the same human being. It even provides an example («Sjorgren» into «Sjogren»), making the operation distinct from sibling tools like list_persons, find_person, and unmerge_person.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use guidance (when two records are one human being) and warns that list_persons' 'similar' marker is only a hint, not sufficient reason to merge. It also says to ask the person first, names the undo path through unmerge_person, and states permission and plan prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
merge_termsMerge termsADestructiveInspect
Join one term to another of the same project when they are one notion — «Размерные подгруппы» into «Размерная подгруппа». The joined term's name and spellings become the target's variants (so the reading does not offer that spelling again), its links move to the target, and the joined term is gone; this cannot be undone. The target keeps its definition, kind, source and place — with 'takeDefinition', the joined term's definition replaces it, together with the source and place it was read from. The result is confirmed if either was; two proposed terms stay proposed. 'similar' in list_terms names terms that look alike up to the form of their words. Members of the project who may write only. Only where the company's plan includes AI.
| Name | Required | Description | Default |
|---|---|---|---|
| from | Yes | The term to join to the other, as list_terms returned it — it is removed. | |
| into | Yes | The term that stays. | |
| takeDefinition | No | true to take the joined term's definition, with its source and place, instead of the target's. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the destructiveHint=true annotation: it enumerates exactly what is destroyed (the joined term), what transfers (spellings become variants, links move), irreversibility ('this cannot be undone'), and the takeDefinition override of definition/source/place. It also discloses edge-case state handling ('the result is confirmed if either was; two proposed terms stay proposed') and permission/plan gates.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and consequence before the finer rules; nearly every clause carries decision-relevant information. It is a single dense block that could be split into sentences for scanability, and the 'similar' aside is slightly tangential.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, irreversible mutation with no output schema, the description covers permissions, plan gating, data migration, and edge-case status outcomes. The only real omission is what the call returns (e.g., the surviving term or confirmation state), which an agent may want before chaining calls.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the prose adds real meaning: the asymmetry of 'from' (removed) versus 'into' (stays) is restated behaviorally, and takeDefinition is explained with its side effects on definition, source and place rather than just its default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('join one term to another of the same project when they are one notion') with a concrete example in both languages. The destructive, absorbing semantics ('the joined term is gone', its name becomes the target's variants) make it unambiguous versus near siblings like link_terms or delete_term, which are not destructive in this way.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the selection condition ('when they are one notion') plus prerequisites: same project, write-level membership, and an AI-inclusive plan, and points at list_terms' 'similar' flag as the discovery path. It stops short of explicitly naming the alternative to use when terms are merely related rather than identical (e.g., link_terms), so no explicit when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_issueMove issueADestructiveInspect
Move an issue into another project, taking its comments, history, attachments, links and sub-tasks with it. The key does NOT change: 'PM-12' stays 'PM-12' wherever it lives, so every existing link and branch name goes on working. Call it with apply=false first (the default): the answer says what the move would cost — values in columns the target project does not have are LOST, the sprint is cleared, and a secret attached to the issue becomes readable by the target project's lead. Refuses when the target has no state by the issue's status name; say what that state becomes with 'statuses'. A sub-task cannot move on its own — move its parent. Needs full write access in BOTH projects.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | The issue to move, e.g. 'PM-12'. | |
| apply | No | false (the default) answers what the move would do and changes nothing. true does it. | |
| statuses | No | What each source status becomes in the target project, as 'In Review=Review, Blocked=On hold'. Only needed for states the target does not already have under the same name. | |
| toProject | Yes | Project key to move it into, e.g. 'CRM'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, it explains exactly what is at risk: lost values in missing target columns, cleared sprint, secret readability change, refusal behavior, and permission requirements. This is unusually rich behavioral disclosure for 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but front-loaded: purpose first, then key invariants, then dry-run consequences, refusal conditions, and permissions. Every sentence carries non-redundant operational information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive cross-project move with no output schema, it covers the critical unknowns: data loss, sprint clearing, secret exposure, status mapping, sub-task handling, and required permissions. An agent has enough to decide whether and how to call it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: apply=false is explicitly a dry-run that reports costs, and statuses is explained with an example mapping format. It does not add much for key or toProject beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Move an issue into another project') and enumerates what moves with it, making the scope concrete. The phrase 'into another project' distinguishes relocation from ordinary issue editing or linking.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit operational guidance: run with apply=false first, use statuses for unmatched target states, do not move sub-tasks directly, and ensure write access in both projects. These are concrete when/when-not conditions and a procedural alternative for sub-tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_page_imagePdf page imageARead-onlyInspect
A page of a PDF attached to an issue or a wiki page, as a picture you can look at — whole, or only the part 'box' names — drawn on the server, so nothing has to be installed on your side. Use it to read what a PDF's extracted text loses: superscripts, formulas, tables, diagrams. Name the issue by 'key' or the page by 'pageId' (or 'spaceKey' + 'title'), and the file by 'filename' as get_issue / get_wiki_page list it. 'page' counts from 1; the answer says how many pages the file has. 'box' is 'x,y,w,h' in fractions of the page as it is shown, top left first — '0,0,1,0.5' is the top half. The answer also carries 'quote': the Markdown that puts exactly this picture into a comment or a page of the same issue or page, and leads a reader back to that page of the PDF. Reading needs only permission to see the issue or the page.
| Name | Required | Description | Default |
|---|---|---|---|
| box | No | Optional part of the page: 'x,y,w,h' in fractions of it, top left first. | |
| key | No | Issue key, when the PDF is attached to an issue. | |
| page | No | The page, from 1. | |
| title | No | Exact page title, when identifying the page by title. | |
| width | No | Optional width of the picture in pixels, 400 to 2400; 1200 if not given. | |
| pageId | No | Wiki page id, when the PDF is attached to a page. | |
| filename | Yes | File name of the PDF, as listed by get_issue or get_wiki_page. | |
| spaceKey | No | Space key, when identifying the page by title. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds meaningful behavior: rendering happens server-side with nothing installed locally, permission to see the issue/page is sufficient, and the response includes the PDF's page count plus a 'quote' Markdown string. It does not cover failure modes or rate limits, but exceeds the annotation baseline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense paragraph that front-loads purpose before moving into usage, identification, parameters, and return details. Every sentence contributes useful information, though the density makes it slightly harder to scan than a structured list would be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter read-only tool with no output schema, the description covers enough for correct invocation: purpose, when to use, how to identify the issue/wiki page and file, page numbering, box semantics, permission requirements, and the returned quote markdown. The image return is implied clearly enough, and no critical invocation detail is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds real semantics beyond the schema: it explains the alternative identification paths ('key' vs 'pageId' vs 'spaceKey' + 'title'), clarifies that 'page' counts from 1, and gives concrete box syntax with an example ('0,0,1,0.5' is the top half). Width is left to the schema, which is fine given full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource (a page of a PDF attached to an issue or wiki page) and operation (rendered as a viewable picture, optionally cropped). It distinguishes this tool from text-extraction tools by saying to use it for content that extracted text loses, such as superscripts, formulas, tables, and diagrams.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear usage context: read what a PDF's extracted text loses. It also references get_issue / get_wiki_page as the source for filenames and explains how to identify the containing issue or wiki page. It does not explicitly name a sibling alternative to use instead when text extraction suffices, so it stops short of full when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
product_helpProduct helpARead-onlyInspect
How the TRACKER ITSELF works — not what is in anybody's project: what a feature does, where it is on the screen, who may use it, and what the product does not do. Use it when the person asks about the tool ('how do sprints work here', 'where do I switch on due reminders', 'can a wiki page be restricted') rather than about their work. Without 'topic' it lists the topics, each with the questions it answers; with one it returns that topic's text. Buttons and menu items are quoted in «…» in the person's interface language — repeat them as given. 'availability' is set when the feature is switched off for this company: say that first. The text is the whole of what the help says; what it does not say, say it does not cover — do not fill it in from other trackers, and do not answer a question about the product from the project's wiki.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | No | A topic id, e.g. 'sprints'. Leave out for the list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld=false/non-destructive, and the description adds materially beyond them: no-topic returns the topic list with the questions each answers, with-topic returns that topic's text, an 'availability' flag signals a feature switched off for the company and must be reported first, and UI labels are quoted in «…» in the user's language and must be repeated verbatim. It also draws a hard boundary on how far the returned text may be extrapolated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The key distinction is front-loaded in the first two clauses and nearly every sentence carries an operative instruction. It is a dense unbroken block, though — breaking the return-mode and quoting rules into separate lines would make it easier to scan without losing content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
One optional parameter, no output schema, and the description supplies what the schema cannot: the shape of both return modes, the availability caveat, the locale-quoting convention, and the grounding restriction. An agent has everything needed to call it and to report results correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single param is documented there, so the baseline is 3; the description goes further by spelling out the two distinct return modes for the parameter (omitted = topic list with questions, supplied = that topic's text) and even gives an example id format ('sprints').
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: explains how the tracker itself works, covering feature behavior, on-screen location, permissions, and product limits. Explicitly contrasts with the siblings that hold project content ("not what is in anybody's project"), so an agent can separate it from search_wiki/get_wiki_page without reading those schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the exact triggering condition with sample utterances ("how do sprints work here", "where do I switch on due reminders") and the exclusion rule ("rather than about their work"). It also names the anti-pattern to avoid: do not answer a product question from the project's wiki.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_codeRead codeARead-onlyInspect
Read one file from a repository connected to a project. A long file arrives cut and says so; generated and binary files are not read.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | The file's path inside the repository, e.g. 'src/app/main.ts'. Not a URL. | |
| repo | No | Which repository, as 'group/repo'. Omit when only one is open. | |
| reference | No | Branch, tag or commit. Omit for the default branch. |
TDQS
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 adds genuinely new behavior: long files arrive truncated with a notice, and generated/binary files are refused — exactly the kind of edge-case disclosure that prevents surprise failures.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no filler; the primary purpose is front-loaded and the behavioral caveats follow in a single clause. Nothing could be removed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description covers the main return-value risk (truncation) and excludes unreadable file types. It leaves error behavior (missing path, bad reference) unaddressed, which keeps it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with path, repo and reference each documented including defaults and format examples. The description adds no parameter-level semantics beyond what the schema already provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Read one file from a repository") and scopes it to a single file, which implicitly separates it from bulk siblings like search_code and list_code. It doesn't explicitly name those siblings, so it stops short of 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by "one file" and the repo/reference parameters, but there is no explicit when-to-use or when-to-use-something-else guidance, and no alternative is named despite many code-related siblings (search_code, list_code, code_symbols).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_page_literatureRead page literatureADestructiveInspect
Read a wiki page's hand-written «Literature» list (the section headed Литература, Literature, References or Bibliography) against its project's register of sources. Without 'take' nothing is written: each line comes back with what was read of it — its key in front ('[IMP26] …'), arXiv id, DOI, MR, zbMATH number, authors, title, venue, year, the † — and an offer: 'new' (a source to add; 'suggestedKey' where the line has no key), 'known' (the register has it as 'source': cite it as [@source] instead of the line), 'conflict' (its key is another work's: take it with 'as', a new key) or 'unread' (nothing to make a source of). The reading of the words is a guess — show the person the lines and what was read before taking. Call again with 'take' — the lines chosen — to add them, unchecked; each says 'created', 'skipped' or 'refused' with the reason. Anybody who may read the page reads; members who may write take.
| Name | Required | Description | Default |
|---|---|---|---|
| page | Yes | The wiki page's id. | |
| take | No | The lines to add, as a JSON array: [{"index":0},{"index":3,"as":"Tah81b"}] — 'index' as the offers numbered them, 'as' a key of your own. Leave out to only read. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint=true, readOnlyHint=false) it discloses that nothing is written without 'take', that added lines are not validated ('unchecked'), that each line reports 'created', 'skipped' or 'refused' with a reason, and that parsing is a guess that should be confirmed with a human. It does not cover idempotency or what happens on a second take of the same line.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first clause, but the rest is a single dense run-on paragraph mixing return payloads, offer types, workflow and permissions. The information is useful but the packaging makes it harder to scan than it needs to be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-shape burden and does so reasonably: it enumerates the read fields (key, arXiv id, DOI, MR, zbMATH, authors, title, venue, year, †) and the four offers plus the write outcomes. An agent could invoke it correctly from this, though edge cases like duplicate takes are unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents both 'page' and 'take', including the index/as shape. The description reinforces that 'as' supplies a new key for a conflicting line and that 'suggestedKey' appears when a line has none, but adds no syntax or constraints beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb+resource pair: it reads a wiki page's hand-written «Literature» section and checks it against the project's register of sources, and it can optionally add the chosen lines. It implicitly separates reading (default) from taking ('take'), which distinguishes it from generic page/reference tools, though it never names an actual sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit two-phase workflow (call without 'take' to read, show the person the lines, call again with 'take' to write) and states the permission model: readers may read, members who may write may take. No exclusions relative to specific sibling tools are given, which keeps it below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
release_versionRelease versionADestructiveInspect
Mark a version released — or, with released=false, take the mark back. A version is what a project's work goes out in — '2.4.0', 'Autumn'. It is the project's own: an issue carries versions of its own project only, any number of them ('fixVersions' on create_issue, update_issue and get_issue; JQL 'fixVersion = "2.4.0"', 'fixVersion in unreleasedVersions()'). Releasing runs the project's rules that wait for a version to ship (list_project_rules, trigger 'versionReleased') on the issues it carries, and tells the project's webhooks. It does NOT refuse a version that still carries unfinished issues: 'open' in the answer says how many, and 'openIssues' names up to twenty of them — check before you release, or say so to the person. With no 'releaseDate', today is written as the day it shipped — over a planned day, as the releases screen does. Releasing a version that is already released changes nothing and answers 'already': true. Project lead or admin only.
| Name | Required | Description | Default |
|---|---|---|---|
| version | Yes | The version, by its name or its id from list_versions. | |
| released | No | false takes the mark back. | |
| projectKey | Yes | Project key, e.g. 'ONB'. | |
| releaseDate | No | The day it shipped, as YYYY-MM-DD. Left out, today. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only mark it non-readonly and destructive; the description goes far beyond, disclosing that it fires project rules with the 'versionReleased' trigger, notifies webhooks, does not block on unfinished issues, reports open counts and up to twenty issue names, defaults releaseDate to today overriding a planned date, and is a no-op on already-released versions. That is exactly the kind of side-effect and edge-case detail an agent needs before mutating.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The primary behavior and the reversal are front-loaded, then side effects, then permission limits. It is dense and long, with the embedded JQL examples ('fixVersion in unreleasedVersions()') being the most expendable digression, but little else is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still explains the meaningful return signals ('open' count, 'openIssues' sample, 'already': true). It covers permissions, defaults, side effects, and idempotency — nothing an agent needs to invoke it safely is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema does not: releaseDate omitted writes today and overwrites a planned date, and released=false is a reversal rather than a separate operation. Version lookup by name or id is already in the schema, so the lift is moderate rather than extensive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Mark a version released' — plus the inverse operation via released=false. It clearly separates this from create_version and update_version by describing the released mark specifically, and defines what a version is in the product's terms.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete conditions: check 'open' before releasing, project lead or admin only, and idempotent re-release returns 'already': true. It names adjacent tools (list_versions, list_project_rules) as prerequisites, but never explicitly says when to use update_version instead for other version field changes, which is the sibling most likely to be confused with it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_from_showcaseRemove from showcaseADestructiveInspect
Stop showing one row of a public project's showcase (its id from list_showcase): from the next request the issue or page is closed to everybody outside its own project again. Nothing is deleted but the row. The owner of the project it belongs to or an administrator of the public project may; written to both projects' journals.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The row's id, from list_showcase. | |
| projectKey | Yes | Key of the public project, e.g. 'D5'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past destructiveHint=true by spelling out the exact scope of the effect: the issue or page becomes closed to everyone outside its own project from the next request, and 'Nothing is deleted but the row.' It also states authorization (project owner or public-project administrator) and the side effect of writing to both projects' journals.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the effect and the id source, then permissions and side effects. Dense and mostly waste-free, though the final clause ('may; written to both projects' journals') is compressed to the point of being hard to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation with no output schema, the description covers what changes, what does not change, permission requirements, and journal side effects. An agent has everything needed to decide and call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents both parameters, including the id's origin and a projectKey example. The description only restates the id's provenance and adds 'public project' framing, which is marginal beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Stop showing one row of a public project's showcase') and names the sibling it consumes ('its id from list_showcase'), so an agent can separate it from add_to_showcase/list_showcase without reading a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for use (un-showcasing one existing row) and the prerequisite source of the identifier from list_showcase. It doesn't explicitly name the inverse tool or exclusion conditions, but the intent is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_legal_referenceRemove legal referenceADestructiveInspect
Take a legal reference off an issue or a wiki page, by the 'id' list_legal_references gave it — as «Remove» in the block «Legal acts» does. A reference read from words that still stand in the text is kept as a «no» ('keptAsRefused' true, its state 'rejected'), so the next save does not put it back; one put by hand with no words of its own is deleted. Requires permission to edit the text it stands in.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The reference's id, from list_legal_references. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations already marking the tool as destructive and not read-only, the description adds important behavioral detail: references from still-present source text are retained as 'rejected' with keptAsRefused true so saves do not recreate them, while hand-added references with no source text are deleted. It also states the permission requirement, which is valuable context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the primary action and keeps to two sentences, though the second sentence is dense and includes several quoted state names. It is appropriately sized for the behavioral complexity but slightly awkward in phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive single-parameter mutation with complete schema coverage and no output schema, the description supplies the needed context: the two removal outcomes, the state consequences, the id source, and the permission requirement. Nothing critical for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the single id parameter is already fully documented. The description repeats that the id comes from list_legal_references, matching the schema rather than adding format or edge-case semantics, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Take a legal reference off an issue or a wiki page'), gives the scope, and points to the sibling list_legal_references as the source of the id. An agent can distinguish this from add_legal_reference and list_legal_references without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies when to use the tool by describing the removal action and comparing it to the «Remove» action in the «Legal acts» block, and it names list_legal_references as the id source. However, it does not explicitly state exclusions or when to avoid removal, so usage guidance is inferable but not fully spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_trackRemove trackADestructiveInspect
Undeclare a track. THE LABEL STAYS ON THE WORK: what goes is the declaration, so the issues keep their tag and declaring the track again brings exactly the same ones back. Nothing here can lose work — but the name, icon and place ARE lost, and the track's issues count as 'outside every track' afterwards. For a track that is merely finished, archive it instead: set_track with archived=true. Needs permission to write in the project.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | Yes | The track's tag, e.g. 'cherry-orchard'. | |
| projectKey | Yes | Project key, e.g. 'TH'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the destructiveHint=true annotation by explaining what is and isn't destroyed: issues keep their tag and re-declaring restores them, but name/icon/place are lost and issues become 'outside every track'. It doesn't cover the response shape or error behavior, but the impact profile is unusually well disclosed for 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the key distinction (undeclare vs delete) and every sentence carries real information. Slightly long and reliant on emphasis, but no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-param destructive mutation with no output schema, the description covers reversibility, side effects, permission needs, and the archive alternative — everything an agent needs to call it responsibly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both required params (projectKey, tag) documented in the schema, so baseline is 3. The description adds no meaning about parameter format or effect beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Undeclare a track' — and immediately disambiguates from deletion by clarifying that the declaration goes, not the label. Despite the tool name 'remove_track', an agent can tell exactly what this does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the when-not case and the alternative: 'For a track that is merely finished, archive it instead: set_track with archived=true.' It also states the prerequisite (permission to write in the project). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reply_to_requesterReply to requesterAInspect
Write to the person who opened a support request. The text becomes a comment the requester can read on their page and is emailed to them — unlike add_comment, which is always internal and never reaches the requester. Write it to the customer, in their language (get_support_request says which). Requires full write access to the support project. Answers with the comment id and whether the letter went ('emailed'; 'emailError' when it failed — the reply is kept either way).
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Issue key of the request, e.g. 'SUPPORT-12'. | |
| body | Yes | What to tell the requester. Markdown is kept as written. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses the permission requirement (full write access to the support project), the external side effect (email delivery to the requester), and the failure semantics — 'emailError' still keeps the reply. That last point is operationally important and appears nowhere in the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences, front-loaded with purpose and the sibling contrast. The final sentence is a bit packed with quoted return-field names, but each sentence carries distinct information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only two well-documented parameters and no output schema, the description nonetheless explains the return shape (comment id, emailed/emailError) and the side effect. Nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3, but the description adds real semantic guidance: the body must be addressed to the customer and written in their language, which the schema does not say. The 'key' parameter is left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — writing to the person who opened a support request — and immediately distinguishes it from the sibling add_comment by outcome (requester-visible and emailed vs. internal-only). An agent can separate the two without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the alternative (add_comment) and the exact condition that selects this tool: the message must reach the requester. It also points at get_support_request to determine the correct language before writing, which is concrete pre-call guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
report_agent_usageReport agent usageADestructiveInspect
Record what one agent run cost an issue (local or mirrored/upstream): tokens by kind and machine time. Re-sending the same 'source' + 'externalId' updates that record instead of adding a second one, so a retry never doubles the spend. Omit a metric you did not measure — omitted is 'not reported', which is different from zero. Requires permission to edit the issue.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Issue key, e.g. 'UK-1'. | |
| host | No | Which host it ran on. | |
| note | No | Short note, e.g. the outcome. | |
| agent | No | Which agent did the work, e.g. 'claude-code'. | |
| model | No | Which model it ran on, e.g. 'claude-opus-5'. | |
| runId | No | The run this record belongs to, when one run reports several records (different models or hosts). | |
| source | Yes | Who is reporting, e.g. 'bg-agent-api'. Idempotency is scoped to it. | |
| costUsd | No | Cost in USD, if you know the rates that applied. | |
| endedAt | No | When the run ended (ISO 8601). | |
| startedAt | No | When the run started (ISO 8601). | |
| externalId | Yes | Your own key for this record (usually the run id). Re-sending it updates the record. | |
| inputTokens | No | Input (prompt) tokens. | |
| agentSeconds | No | Wall-clock seconds the run took. Machine time, not a worklog. | |
| outputTokens | No | Output (completion) tokens. | |
| cacheReadTokens | No | Cache-read tokens. | |
| cacheWriteTokens | No | Cache-write tokens. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds real context beyond the annotations: it explains the idempotent upsert key (so a retry never doubles the spend), that omitted means 'not reported' not zero, and that editing the issue requires permission. The destructiveHint=true is consistent with an overwriting update, though the description never explicitly says an update replaces prior field values, which would fully explain the 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with what the tool records, then the idempotency rule, then the omission semantics, then the permission requirement. No sentence is redundant and nothing is buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 16 parameters, no output schema, and already-present annotations, the description covers the things an agent most needs: the write/idempotency model, the omit-vs-zero distinction, and the permission requirement. It leaves open what happens on an invalid issue key or negative values, which is 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so every parameter is already documented, including source/externalId idempotency and the agentSeconds 'machine time, not a worklog' note. The description groups the metrics conceptually ('tokens by kind and machine time') but adds no format or constraint detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: record what one agent run cost an issue, with tokens by kind and machine time. The parenthetical '(local or mirrored/upstream)' adds scope. It does not name the sibling tools (get_agent_usage, delete_agent_usage) that an agent might confuse it with, so it falls short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the clear calling context (recording the cost of one agent run) and gives two explicit operational rules: re-sending the same source+externalId updates rather than duplicates, and omit metrics you did not measure rather than sending zero. It gives no explicit 'do not use this for X' exclusion or named alternative, which keeps it below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
report_computationReport computationADestructiveInspect
Say how a computation an issue rests on stands — a GAP run, a batch of work units, a Lean build that ran somewhere else; the tracker runs nothing. Call it when the job is submitted, as it progresses and when it ends, with the same 'source' + 'externalId' every time: that is one job, updated, never a second. Send only what you know now — a field left out keeps what an earlier report said, so a progress report need not repeat the commit. 'state' is queued, running, done, failed, cancelled or lost (a job whose runner stopped answering); 'starting' reads as running. Report the commit it ran at and the repository's web address: that is what makes a [computer] result checkable, and the answer's 'commitUrl' links it where the host is GitHub or GitLab. 'result' is what came of it, in a sentence — Markdown and $…$ formulas work. Answers with 'created' and 'stateBefore'. A name already reported on another issue is refused with that issue's key. Requires permission to edit the issue.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | The issue the computation answers, e.g. 'MATH-74'. | |
| url | No | The job's own page on its runner (http/https). | |
| state | No | queued, running, done, failed, cancelled or lost. | |
| title | No | What it computes, in words, e.g. 'rank 5, order 2^11, stage C'. | |
| commit | No | The commit it ran at. | |
| result | No | What came of it, a sentence or two. Markdown, $...$ formulas. | |
| source | Yes | Who runs it, e.g. 'tm' or 'boinc'. The job's name is unique within it. | |
| command | No | How it was run: the command line or the job's description. | |
| outputUrl | No | Where its output can be fetched (http/https). | |
| startedAt | No | When it started (ISO 8601). Left out, a move to running stamps now. | |
| externalId | Yes | The job's own name there, e.g. 'kimmy/gap/m74r5u'. The same name again updates the job. | |
| finishedAt | No | When it ended (ISO 8601). Left out, a move to a finished state stamps now. | |
| repository | No | The repository's web address, e.g. 'https://github.com/org/repo'. | |
| progressDone | No | How much is done, as the runner counts, e.g. 812. | |
| progressTotal | No | Out of how much, e.g. 1695. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the annotations: omitted fields preserve earlier values (so partial progress reports are safe), a duplicate name on another issue is refused with that issue's key, editing permission is required, 'starting' is normalized to running, and the response carries 'created' and 'stateBefore'. This is exactly the kind of context annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded and every sentence carries information, but the prose is long and clause-heavy, mixing scope, idempotency, enum semantics and auth into one block. Dense rather than padded, so a 4 rather than 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 15-parameter mutation with no output schema, the description covers identity semantics, partial-update behavior, error and permission conditions, and the shape of the response. An agent has everything needed to invoke it correctly on first try.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3; the description nonetheless adds real semantics — the state vocabulary, the 'starting' alias not present in the schema, why commit + repository make results checkable, and the Markdown/$…$ format for 'result'. It stays above baseline without restating every field.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource — reporting how a computation an issue rests on stands — and scopes it with concrete examples (GAP run, batch of work units, remote Lean build) plus the clarifying 'the tracker runs nothing'. That distinguishes it from list_computations/delete_computation without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear when-to-call rule: on submission, as it progresses, and at the end, always with the same 'source' + 'externalId' because that is one job, updated. The when-not ('never a second') is implicit rather than a named sibling alternative, which keeps it just below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
report_deploymentReport deploymentAInspect
Say that something was deployed to one of a project's environments — the call a pipeline step makes. An environment is one of the places a project's work is put out to — 'dev', 'staging', 'prod' — in order; the LAST one is where finished work ends up. A deployment is a pipeline saying «this went out, there». Each issue it carried then says where it lies ('deployedTo' on get_issue), gets one history line per environment, and the project's rules with trigger 'deployed' run on it. Name the issues it carried in 'issues', or give 'from' and 'to' — two revisions — and the keys are read off the messages of the commits between them in the project's connected repository (a merge commit names its branch and merge request). Both may be given. The same 'id' for the same environment again changes nothing and answers 'repeated': true, so a step that runs twice is safe. 'version' also puts each of those issues in that version of the project. Answers with the issues it found, 'unknown' (keys you named that are no issue of this project), how many times a rule ran, and — on the project's last environment — 'unfinished': the issues that went out while not in a finished state. Needs permission to change issues in the project.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Your own identifier for this deployment — a pipeline or job id. Left out, 'revision' stands in for it. | |
| to | No | The end of that range. Left out, 'revision'. | |
| url | No | A link to the pipeline, http or https. | |
| from | No | The revision the previous deployment to this environment was at — the start of the range of commits to read keys from. | |
| issues | No | The issue keys it carried, comma-separated: 'ONB-12,ONB-15'. | |
| version | No | A version of the project to put these issues in, by name, e.g. '2.4.0'. | |
| fromLast | No | True to start the range at the revision the last deployment to this environment was reported at, instead of naming 'from'. The first report to an environment then reads no range. | |
| revision | No | What went out: a commit, a tag, an image tag. | |
| projectKey | Yes | Project key, e.g. 'ONB'. | |
| repository | No | Which connected repository the range is in, as 'group/repo', when the project has several. | |
| environment | Yes | The environment's name, e.g. 'staging' — one of list_environments. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes far beyond the annotations: it discloses side effects (issues get 'deployedTo', one history line per environment, project rules with trigger 'deployed' run), idempotency semantics ('repeated': true on same id+environment so a re-run is safe), permission requirements, and return contents including 'unknown' and 'unfinished'. This is exactly the mutation context an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and the environment definition, then progressively adds range semantics, idempotency, and return shape. It is dense and em-dash heavy with some redundancy (environment defined at length, repeated mentions of key reading), but nearly every sentence carries usable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 11 parameters, no output schema, and a mutation operation, the description still covers inputs, side effects, idempotency, permissions, and the shape of the response including edge-case fields ('unknown', 'unfinished', rule run counts). Nothing material for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3, but the description adds cross-parameter semantics the schema does not: how 'from'/'to' resolve commit keys via the connected repository (merge commits naming branch/MR), how 'id' relates to 'revision', and how 'version' affects all listed issues. It is complementary rather than repetitive, though some phrasing overlaps the schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('Say that something was deployed to one of a project's environments') and immediately defines the domain objects (environment, deployment) relative to siblings like get_issue and list_environments. An agent can distinguish this from set_environments or release_version without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the calling context ('the call a pipeline step makes') and explains the two ways to supply issues ('name the issues in issues, or give from and to'), noting both may be given. It routes to list_environments for valid environment names, but gives no explicit when-not guidance or comparison against alternative reporting tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
report_lean_auditReport lean auditADestructiveInspect
Report what a CI's #print axioms said of Lean declarations in one repository of the project at one commit: pass Lean's output as it printed it in 'output' (lines like "'D5.rank5' depends on axioms: [propext, Classical.choice, Quot.sound]" and "'X' does not depend on any axioms"), or 'declarations' as a JSON array [{"name":"D5.rank5","axioms":["propext"]}], or both. The latest word per declaration is kept, as a computation's report is; a claim whose Lean basis is bound to a declaration may be marked 'lean' only while its audit is clean — Lean's own propext, Classical.choice and Quot.sound at most, no sorryAx and no axiom of the project's own. Answers each declaration with whether it is clean and the claims bound to it. Members of the project who may write only.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | The CI job's page, http(s). | |
| commit | Yes | The commit the CI built. | |
| output | No | Lean's own #print axioms output. | |
| project | Yes | The project key, e.g. D5. | |
| repository | Yes | The repository of the project, by its path ('ispacex/d5') or address. | |
| declarations | No | Or the declarations as a JSON array: [{"name":"D5.rank5","axioms":["propext"]}]. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and readOnlyHint=false; the description corroborates and explains why — the latest word per declaration is kept, so prior reports are superseded — and adds an authorization constraint ('Members of the project who may write only') plus the exact cleanliness rule (propext/Classical.choice/Quot.sound only, no sorryAx, no project axioms). It does not describe failure modes or what happens when output and declarations disagree.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, but the single dense paragraph packs multiple clauses with em-dashes, and phrasing like 'as a computation's report is' forces re-reading. Content earns its place, yet it would be clearer as short separated statements.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does supply the return shape ('whether it is clean and the claims bound to it') and the upstream data formats, and it states the write permission requirement. Minor gaps remain around conflict handling between the two inputs and error behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description goes beyond the terse schema field docs by showing the literal Lean output lines and the exact JSON shape for 'declarations'. The interaction semantics ('or both', latest word wins) are supplied here rather than in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+scope: reporting what a CI's `#print axioms` said of Lean declarations in one repository at one commit. That clearly separates it from siblings like find_lean_declaration (lookup) and report_computation (a different report kind).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete invocation guidance: pass Lean's raw output in 'output', structured data in 'declarations', or both, with format examples. It does not state when to prefer this over alternatives or when not to call it, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reveal_credentialReveal credentialAInspect
Read one credential's value, by the id from list_credentials. This is the same act as pressing reveal on the screen and carries the same cost: it is recorded against the token you are using, and the person who owns the secret can see that you read it. Call it when you are about to use the value, not to have it on hand. The answer is marked secret: do not copy it into a comment, a description, a merge request or a log.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Credential id, from list_credentials. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing that the read is audited against the calling token and visible to the secret's owner, plus a handling constraint (do not copy into comments, descriptions, merge requests or logs). This is exactly the kind of consequence an agent cannot infer from readOnlyHint/destructiveHint. However, it does not say anything about failure modes (e.g. permission denied, missing id, whether reveal is rate-limited or requires a second confirmation), so the disclosure, while valuable, is not complete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each doing distinct work: purpose, the audit consequence, the timing rule, and the handling rule. The purpose is front-loaded and no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, no-output-schema tool, the definition covers purpose, prerequisite, side effects and post-call handling, which is close to everything an agent needs. It stops short of describing the return shape or error behavior, but with no output schema and annotations already declaring the non-destructive profile, that omission is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter and schema description coverage is 100%, so the schema already explains that id is a credential id from list_credentials. The description repeats that provenance ('by the id from list_credentials') but adds no format, range or edge-case detail beyond the schema. Baseline 3 for a fully-described single param.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read one credential's value') and pins the source of the identifier to list_credentials, which cleanly separates it from create_credential, update_credential and delete_credential in the sibling set. An agent can identify this as the single read-one-secret tool without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to call it ('when you are about to use the value, not to have it on hand'), which is both a positive condition and an exclusion. It also names list_credentials as the prerequisite for obtaining the id, so the call sequence is fully determined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
review_wiki_pageReview wiki pageAInspect
REVIEW a wiki page — a proof, an argument — in your person's name, on the version you read: 'version' is the page's version as get_wiki_page gave it, refused if the page has been edited since. 'verdict' is 'correct', 'gap' or 'error' (leave it out while the review is under way, and give it later with reviewId). 'remarks' is a JSON array of {anchor, key, quote, body}: anchor 'page', 'heading' with key the heading's anchor, 'claim' with key the label of a ::: theorem block, 'formula' with key the \label{…} inside it, or 'quote' with the exact words (at least 8 characters) of the paragraph meant; body is the remark in Markdown. Take the keys from get_wiki_page_reviews' 'anchors'. A place the page does not have is refused. With 'reviewId' the call changes that review instead — its verdict, summary, and more remarks — and 'version' is not needed. Name the agent that did the reading in 'agent' (e.g. 'Claude'): the review is still your person's. The page's author is told. Needs permission to comment on the page.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Page id. | |
| agent | No | The agent that read the page, e.g. 'Claude'. Leave out when your person did. | |
| remarks | No | The remarks, as a JSON array of {anchor, key, quote, body}. | |
| summary | No | What you conclude of the whole, Markdown. | |
| verdict | No | 'correct', 'gap' or 'error'; leave out while under way. With reviewId, an empty string takes the verdict back. | |
| version | No | The version you read and are reviewing. Not needed with reviewId. | |
| reviewId | No | An existing review to change instead of writing a new one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Well beyond the annotations: it discloses staleness refusal semantics, refusal of anchors the page doesn't have, the 8-character minimum for quotes, that the page's author is notified, and the permission requirement. These are exactly the operational facts the readOnlyHint=false / destructiveHint=false annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and nearly every clause carries distinct information, but it reads as one long run-on paragraph mixing version, verdict, remarks schema and permissions; splitting the remarks anchor taxonomy into its own sentence would improve scanability without cutting content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and a stateful mutation with a nested JSON-string parameter, and the description covers the call mechanics thoroughly. It is slightly thin on what the returned review looks like or what state the review is left in after a partial write (no verdict), which would round out the lifecycle.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3, but the description materially enriches the remarks format that the schema only gestures at: the five anchor kinds, what 'key' means for each (heading anchor, theorem-block label, \label{...}), and what the quote must contain. It also explains the verdict lifecycle and reviewId's mode switch.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('REVIEW a wiki page') and immediately characterizes it as reviewing a proof/argument attributed to the caller's person, which separates it from add_wiki_comment or approve_wiki_page. The scope ('on the version you read') is stated up front.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent where 'version' comes from (get_wiki_page), that it is refused if the page changed, when to omit 'verdict' and later supply it with 'reviewId', when 'version' is not needed, and where the anchor keys come from (get_wiki_page_reviews' 'anchors'). The permission prerequisite ('Needs permission to comment on the page') is also stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_codeSearch codeARead-onlyInspect
Find where a string appears in the code of the repositories connected to a project, with the file, the line number and the lines around it. Only repositories whose owners opened them to agents are searched, and the answer says when what it searched was out of date.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Narrow to files whose path contains this, such as 'src/' or '.ts'. | |
| repo | No | Which repository, as 'group/repo'. Omit to search every repository open here. | |
| query | Yes | What to look for, taken literally unless regexp is set. A space is a space, not two terms. | |
| regexp | No | Read query as a regular expression. One with no literal in it may not finish in time. | |
| caseSensitive | No | Match case. Off by default. |
TDQS
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 description's value is in the extra context it adds: the search scope is restricted to repositories whose owners opened them to agents, and results flag staleness of the index. That is real behavioral information not present in structured fields, though rate limits or result caps are unmentioned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with what the tool finds and what it returns, followed by the scoping caveat. No filler and no repetition of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 describes the return content (file, line number, surrounding lines) and the staleness caveat. The only real gap is guidance on how this differs from the other code tools in the sibling list.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so every parameter including query literal-vs-regexp, path narrowing, repo scoping and caseSensitive is already documented in the schema. The description adds no syntax or format guidance beyond that, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Find where a string appears in the code of repositories connected to a project') and even previews the return shape (file, line number, surrounding lines). It never names or contrasts with lookalike siblings such as read_code, code_symbols, code_calls or list_code, so an agent must infer which of the code tools to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: it tells you only agent-opened repositories are searched, which shapes expectations but does not say when to choose this over code_symbols (symbol lookup) or read_code (whole file read). No explicit when-not or alternative routing is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_issuesSearch issuesARead-onlyInspect
Search the issues visible to this token, with a JQL query — the same JQL the Jira REST surface takes, read by the same parser. A query naming a field this tracker does not have is REFUSED and named, never run: it would match everything and read as an answer. Without jql, the shorthand arguments filter instead. Most recently created first unless the query says ORDER BY. Archived issues are left out unless the query names archived, and archivedLeftOut says how many matches that hid — an empty list with it is not "there are none".
| Name | Required | Description | Default |
|---|---|---|---|
| jql | No | A JQL query, e.g. `assignee = currentUser() AND statusCategory != Done ORDER BY updated DESC`. FIELDS: project, status, statuscategory, issuetype, type, priority, resolution, assignee, reporter, creator, key, issuekey, id, summary, description, sprint, parent, epic, labels, archived, agent, teamRole, fixVersion, fixVersions, legalRef, text, created, updated, duedate. OPERATORS: = != ~ !~ > >= < <=, IN (...), NOT IN (...), IS EMPTY, IS NOT EMPTY, combined with AND / OR, with parentheses around a sub-expression — `project = PM AND (status = Blocked OR priority = Highest)` — plus an optional trailing ORDER BY <field> [DESC]. `~` means contains (substring) and is the one to use for free text — `text` searches summary, description and comments. `>` `>=` `<` `<=` are for created/updated/duedate only, with absolute YYYY-MM-DD values: there are NO relative-date functions, so compute the date yourself. The functions are currentUser(), for assignee/reporter/creator, myTeamRoles(), for teamRole, and releasedVersions() / unreleasedVersions(), for fixVersion. `archived` is this tracker's own field: archived issues are left out unless the query mentions it. `epic` is this tracker's own too, and it is the wide one: `epic = PM-12` matches that epic AND the work under it — its children and their sub-tasks — which is how one asks for an epic's whole board in a single clause. `parent` is the narrow one: direct children only, and never the epic itself. `agent` is this tracker's own as well: `agent = product` is an issue an agent of that role has right now — working on it or waiting on its question — and `agent IS NOT EMPTY` is any agent; the assignee of such an issue is still the person it works for. `teamRole` is this tracker's own too: the project's team role an issue is for, by name — `teamRole = "Звуковик"` — and `teamRole in myTeamRoles()` is every issue for a role the caller holds, which with `assignee != currentUser()` is the work of their role that fell to somebody else. `fixVersion` is the project version an issue goes out in, by name or id — `fixVersion = "2.4.0"`; an issue may be in several, so `=` means «is in». `fixVersion in unreleasedVersions()` is what is still to ship, `fixVersion in releasedVersions(PM)` what one project has shipped, `fixVersion IS EMPTY` work in no version. `legalRef` is this tracker's own: the legal act an issue refers to, in its description or a comment — `legalRef = "32015L0849"` by the act's key, its address or its document id, `legalRef ~ "2015/849"` by words in its address or title, `legalRef IS NOT EMPTY` any act. Only in projects that keep legal references. Quote values containing spaces. Seeded values — status: Backlog, "To Do", "In Progress", "In Review", Blocked, Done; statusCategory: "To Do", "In Progress", Done; priority: Highest, High, Medium, Low, Lowest; type: Epic, Story, Task, Bug, "Sub-task". A project's own columns (PM-170) can be searched too, by name — Segment = AI — or as customfield_20003 / cf[20003]; list_project_fields names them. | |
| text | No | Shorthand for `key ~ … OR summary ~ …`. Narrows the query further when `jql` is given too. | |
| limit | No | Max issues to return (default 25, max 100). | |
| status | No | Shorthand for `status = …` (e.g. 'In Progress', 'Done'). Narrows the query further when `jql` is given too. | |
| projectKey | No | Shorthand for `project = …` (must be visible to the token). Narrows the query further when `jql` is given too. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description goes well beyond its obligations: it discloses that unknown fields are refused and named rather than silently matching everything, the ORDER BY default, and the archivedLeftOut counter that prevents an empty list being misread as 'there are none'. These are non-obvious behaviors 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action in the first clause, then adds scoping rules in short, dense sentences. Every sentence adds a distinct constraint (refusal, ordering, archived handling, empty-list caveat) with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the things an agent must know to call and interpret it correctly: input mode selection, ordering, refusal behavior, and the archivedLeftOut field that disambiguates an empty result. No output schema exists, and the description supplies the one return-value detail that matters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already carries the full JQL grammar, field list, operator set and shorthand mappings. The description adds little parameter-level detail beyond the refusal rule, so it sits at the baseline where the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with scope: 'Search the issues visible to this token, with a JQL query — the same JQL the Jira REST surface takes.' It is clearly a read/search tool, but it never names or distinguishes itself from the sibling find_issues, which an agent may confuse with it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the two modes explicitly: JQL when given, shorthand arguments otherwise, and notes that shorthand 'narrows the query further when jql is given too'. It also states the default ordering (most recently created first) and the archived exclusion rule. It stops short of naming find_issues or other siblings as alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_legal_librarySearch legal libraryARead-onlyInspect
Search the laws, regulations and standards this installation's agents have already read off the official sites (EUR-Lex, legislation.gov.uk, Fedlex, FATF and others) — by words and by meaning. Not a web search. Each hit: the act's url, title, the day its text is as of, an offset into the text and a snippet around the match. Open where the company lets an agent role read laws.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many passages, at most 20. Default 8. | |
| query | Yes | What to look for, e.g. 'beneficial owner 25% threshold'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond the annotations: the search is limited to already-read official sources, it searches by words and meaning, each result includes URL, title, text date, offset and snippet, and access is constrained by company role permissions. These details help the agent understand both the scope and the safety/access model.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three tight sentences with no wasted text. It front-loads the core purpose and follows with the most useful disambiguation and return-field context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by describing the key fields returned in each hit. It also covers source scope and access constraints, so an agent has enough context to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so query and limit are already documented in the input schema. The description adds that search works by words and by meaning, but does not elaborate on parameter formats or limits beyond the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: searching laws, regulations and standards already read from official legal sites. It also distinguishes the operation from a generic web search and explains what each hit contains, so an agent can identify the tool's role without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context, including that this is not a web search and that it searches content already read from official sites. It does not explicitly name alternatives such as list_legal_library or get_legal_document, so the routing guidance is strong but not complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_linked_confluenceSearch linked ConfluenceARead-onlyInspect
Search the Confluence of a project's own Jira site (see get_linked_confluence_page) with CQL, as its own search does — e.g. 'type = page AND text ~ "onboarding" ORDER BY lastmodified DESC', 'space = ENG AND title ~ "release"', 'parent = 123456'. Answers each page's confluence_page_id, confluence_url, title, space, an excerpt and when it changed; read one whole with get_linked_confluence_page. A query the site cannot read comes back with its reason. This tracker's own wiki is searched with search_wiki. Name the project by 'project', or an issue here by 'issue'. For the people who work in the project; at most 10 reads of the linked site a minute per person.
| Name | Required | Description | Default |
|---|---|---|---|
| cql | Yes | The CQL query, as that Confluence reads it. | |
| issue | No | An issue here, e.g. 'PM-12', whose project's site is searched. | |
| limit | No | How many pages, at most 30. Default 10. | |
| project | No | Project key here, e.g. 'PM'. Or give 'issue'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld/non-destructive annotations, it discloses a concrete rate limit (at most 10 reads of the linked site a minute per person), error behavior (unreadable queries return the site's reason), and the exact fields returned per page. That is substantive context annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the verb, target site and example queries; the sibling routing and rate limit follow. It is a single dense paragraph with long em-dash-linked clauses that could be broken up, but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by enumerating the returned fields, and it covers rate limits, failure semantics, and sibling alternatives. Nothing an agent needs to invoke this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning with three concrete CQL examples showing query syntax and clause forms (type/text/parent/space/title with ORDER BY). The project-versus-issue alternative is reiterated usefully but the limit cap is only restated from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (search a project's linked Confluence site with CQL) and explicitly distinguishes itself from two siblings: get_linked_confluence_page for reading one page whole, and search_wiki for the tracker's own wiki. An agent can pick the right tool without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing rules: use search_wiki for the tracker's own wiki, get_linked_confluence_page to read a whole page, and supply either 'project' or 'issue' to identify the site. The 'issue'/'project' alternative is spelled out with examples.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_linked_jiraSearch linked JiraARead-onlyInspect
Search a project's own Jira (see get_linked_jira_issue) with JQL, as its own search does — e.g. 'project = ACME AND status != Done ORDER BY updated DESC', 'text ~ "login"'; currentUser() is the project token's owner, not you. Answers each issue's jira_key, jira_url, summary, type, status, priority, assignee and when it changed; read one whole with get_linked_jira_issue. A query the site cannot read comes back with its reason. This is the other site's JQL; this tracker's own issues are searched with search_issues. Name the project by 'project', or an issue here by 'issue'. For the people who work in the project; at most 10 reads of the linked Jira a minute per person.
| Name | Required | Description | Default |
|---|---|---|---|
| jql | Yes | The JQL query, as that Jira reads it. | |
| issue | No | An issue here, e.g. 'PM-12', whose project's Jira is searched. | |
| limit | No | How many issues, at most 30. Default 10. | |
| project | No | Project key here, e.g. 'PM'. Or give 'issue'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld annotations, it discloses a per-person rate limit, the failure mode for unreadable queries ('comes back with its reason'), and the non-obvious currentUser() semantics (the project token's owner, not the caller). It also enumerates the returned fields, which matters because 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and alternative routing, and every clause carries information. The semicolon-chained style makes it denser than needed, and the trailing audience clause is the weakest sentence, but nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by listing the returned fields and the error shape, and it covers scope, targeting, rate limits, and sibling routing. Nothing an agent needs to invoke this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: concrete JQL examples, the currentUser() interpretation, and the 'project' vs 'issue' either/or targeting rule. It does not restate the limit bound, which the schema already covers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (search the linked Jira with JQL) and immediately disambiguates from both get_linked_jira_issue (single-issue read) and search_issues (this tracker's own issues). An agent can pick the right tool without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: use search_issues for this tracker's issues, get_linked_jira_issue to read one issue whole, and name the target by 'project' or by 'issue'. It also states the audience ('for the people who work in the project') and a hard rate limit of 10 linked-Jira reads per minute per person.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_wikiSearch wikiARead-onlyInspect
Search wiki pages visible to this token by free text: by words in any form and by meaning (where the server has its embedding model), and literally — the title, the body, the labels written on an attached SVG diagram. Best match first; match says what found each page. files are PDF and Word files attached to pages, found by the words inside them. Optionally restrict to one space key. Without text, the pages most recently updated first.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | What to look for, in your own words. | |
| label | No | Only pages carrying this label (list_wiki_labels names a space's labels). With `text`, the labelled pages that say it; without, all of them, most recently updated first. | |
| limit | No | Max pages to return (default 25, max 100). | |
| spaceKey | No | Restrict to this space key (e.g. 'PM'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, non-destructive, closed-world. The description adds real value beyond that: result ordering (best match first), the presence of a `match` field explaining why each page was found, the fact that `files` are attached PDF/Word hits, and the token-visibility constraint. Only pagination/format details are left unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: search scope first, then matching modes, then result semantics, then parameter options. Every clause carries information, though the telegraphic dash-heavy phrasing ('by words in any form and by meaning…, and literally') makes it slightly harder to parse than necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does significant work by explaining `match` and `files` in the response and the default ordering. Combined with the fully described input schema and safety annotations, an agent has enough to call it correctly; only pagination/response-shape specifics are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented, including label semantics and the default/max limit. The description reinforces intent ('in your own words', optional space scoping) but adds little beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (search wiki pages) plus the exact scope: pages visible to this token, matched by free text, semantic meaning, literal body/title/label text, and even text inside attached SVG diagrams and PDF/Word files. This is clearly distinguishable from get_wiki_page (single fetch), list_wiki_spaces, and list_wiki_labels siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete usage context: optional space key restriction, optional label restriction (with the with/without-text distinction), and the behavior when `text` is omitted (most recently updated first). It lacks an explicit 'use X instead when…' routing sentence against siblings like search_code or find_issues, but the conditions for the main modes are clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_chat_messageSend chat messageAInspect
Write a message in a chat, as yourself — as the screen sends it: the chat's people see it at once, and it is told by push and by letter to whoever it calls: in a direct chat the other person, in a group or a project's chat only who it mentions ([~username], the handle list_users gives) or answers (replyTo). An agent of the chat answers when mentioned ([~agent:product]) or replied to, and in a chat with an agent every message is a question to it. A project's chat takes a message from whoever may comment in the project. Answers with 'notified' (who this actually tells, and why: direct, mention, reply — never yourself), 'unresolvedMentions' (what looked like a mention and told nobody, with a reason: unknown, inactive, self, not_in_chat, or an agent's) and 'agents' (the agents it called and their requests). A wrong handle is kept as written and never refused, so that list is the only sign it did not land. Text only — files are sent from the screen.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | The message, Markdown — with $…$ formulas and [~username] mentions. At most 32 KB. | |
| chatId | Yes | The chat's id, as list_chats gives it. | |
| replyTo | No | The message of this chat this one answers. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations only saying this is a non-destructive write, the description carries real weight: it discloses that messages notify people immediately, exactly who gets notified (direct, mention, reply — never yourself), that unmatched handles are silently kept rather than rejected, and that agents may be invoked as a side effect. That is genuinely useful side-effect disclosure beyond the annotation set.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content is dense and valuable, but the prose is metaphor-heavy ("told by push and by letter to whoever it calls") and delivered as one long block, so the notification rules and failure modes are harder to extract than they should be. It front-loads the core action, which helps, but several sentences could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates by documenting the response fields (notified, unresolvedMentions with its reason values, agents) and by flagging that unresolvedMentions is the only signal a mention failed. Combined with permission and mention-syntax coverage, an agent has what it needs to call this correctly and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description still adds meaning: it explains replyTo's effect (who is notified and that an agent answers a reply) and the mention syntax accepted in body ([~username] from list_users, [~agent:product]). It does not restate the 32 KB limit or chatId sourcing, which the schema already handles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Write a message in a chat, as yourself" is a specific verb + resource and makes clear this creates a new message rather than editing one. It also draws a boundary against file sending ("Text only — files are sent from the screen"), implicitly pointing at add_attachment, though it never names edit_chat_message or delete_chat_message as the siblings for other message operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage conditions are covered well: it explains direct vs. group vs. project chat behavior, the permission prerequisite for project chats ("takes a message from whoever may comment in the project"), and the agent-chat case where every message becomes a question. It lacks explicit when-not-to-use routing to edit_chat_message or add_attachment, so a 5 isn't warranted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_chat_agentSet chat agentADestructiveInspect
Put a company's agent into a group or a project's chat, or take it out, as the chat's settings do (PM-1247) — a group's administrators and, in a project's chat, whoever configures the project. Put in, it answers when it is mentioned ([~agent:product]) or its message is replied to, as the person who called it, and reads the chat only as far back as 'reads' says: 'after' (the default) — only what is written from now on — or 'last' with 'last' messages before each call, 1–30. Already in, nothing about it changes: take it out and put it in again to change what it reads. Taken out, it reads nothing more: a call still waiting is refused. Refused where the company's owner does not let that agent into chats (get_chat_agent_policy). Each put-in, take-out and call is a line in the company's journal, without the words.
| Name | Required | Description | Default |
|---|---|---|---|
| last | No | With reads='last': how many earlier messages, 1–30. | |
| agent | Yes | The agent, by key or handle — product, agent:analyst. | |
| reads | No | 'after' (default) or 'last'. | |
| chatId | Yes | The chat's id. | |
| remove | No | True takes it out. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: states the agent answers only when mentioned ([~agent:product]) or replied to, acts as the caller, that removal makes pending calls be refused, that the owner's policy can block the operation, and that each put-in/take-out/call is journaled without message words. This is exactly the extra context destructiveHint=true cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action is front-loaded, but the body is one dense run-on packed with em-dashes and parentheticals ('as the chat's settings do (PM-1247)', '([~agent:product])', '1–30'), which hurts scannability. Nearly every clause carries real information, but the packaging makes it harder to parse than it needs to be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter mutation tool with no output schema, it covers permissions (group admins, project configurers), read-backfill semantics, idempotency/change caveat, refusal conditions, policy gate, and audit side effects. An agent has what it needs to decide and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description earns above that by explaining that 'reads' defaults to 'after' (only new messages) versus 'last' with 1–30 earlier messages per call, and by clarifying that changing the read scope requires a remove/re-add cycle rather than a direct update.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: puts a company's agent into a group/project chat or takes it out, with the scope of the target chat named. It is distinguishable from set_chat_agent_policy (referenced as the gatekeeper) and set_chat_members by focusing on agents rather than people, though that contrast is never stated explicitly. The PM-1247 ticket reference adds noise rather than clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives actionable conditions: 'remove' takes it out, 'reads' controls backfill, and crucially 'Already in, nothing about it changes: take it out and put it in again to change what it reads' — a genuinely useful workflow constraint. It also flags the refusal case and points at get_chat_agent_policy to check beforehand. It never explicitly routes to sibling tools like set_chat_members or set_chat_keeping.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_chat_agent_policySet chat agent policyADestructiveInspect
Choose which agents may be in this company's chats — the company's owner only (PM-1247). 'all': every agent switched on; 'none': no agent anywhere — none may be put in or called, and those already in chats answer nobody; 'chosen': only the agents named in 'roles' (the whole list — one not named is barred). Takes effect at once, a call already waiting included. A line in the company's journal says from what to what.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | 'all', 'none' or 'chosen'. | |
| roles | No | With 'chosen': the agents let in, by key or handle. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint=true annotation, it discloses the key operational traits: the change takes effect immediately, applies even to a call already waiting, an unnamed agent is barred under 'chosen', and an audit line records the before/after in the company journal. It also notes the owner-only authorization constraint. This is exactly the context annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, front-loaded with the resource and then the mode semantics; nothing is padding. The dense em-dash/parenthetical style (including the PM-1247 ticket reference) makes it slightly harder to scan than it needs to be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive two-parameter mutation with no output schema, the description covers authorization, immediacy, in-flight impact, list-replacement semantics and audit trail — everything an agent needs to invoke it safely and correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds real semantics: 'roles' is a full replacement list rather than an additive one ('the whole list — one not named is barred'), and it spells out the practical consequence of 'none'/"all' at the chat level. That goes meaningfully beyond the terse schema strings.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Choose which agents may be in this company's chats') and immediately enumerates the three policy values, which no sibling does. It is clearly separable from set_chat_agent, set_chat_members and get_chat_agent_policy.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains precisely what each mode means and that 'chosen' requires the 'roles' list, which tells an agent when to pick each option. It stops short of explicitly naming the read counterpart (get_chat_agent_policy) for checking the current setting, so it stops at a strong 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_chat_keepingSet chat keepingADestructiveInspect
Choose how long this company's chats are kept — the company's owner only. 'days' 30, 90 or 365: within the hour every message older than that is erased with its files, in every chat of the company, for good, and so on from then; a line in the company's journal says how many went. Omit 'days' for as long as the company is (the default), which erases nothing. An issue made of a message keeps its words. Ask the owner before shortening it: what is erased does not come back.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | 30, 90 or 365; omit for no term. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the destructiveHint annotation by explaining the timing (within the hour), scope (every chat of the company), permanence (for good), collateral effects (files erased, journal entry), and an exception (issues made from a message keep their words). This is exactly the behavioral context needed for a destructive retention change.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and owner restriction are front-loaded, followed by parameter consequences, default, exception, and warning. It is dense but mostly earns its words; the phrase 'and so on from then' is slightly awkward, but the length is justified by the destructive operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter destructive tool with no output schema, the description covers authority, timing, scope, irreversibility, default behavior, side effects, and an important exception. An agent has enough information to call it correctly and safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema already documents the single parameter and its allowed values at 100% coverage, the description adds essential semantics: what each retention period actually does, that omission means indefinite retention and erases nothing, and that issue-derived messages are exempt from deletion.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: choosing how long this company's chats are kept. Adds the crucial scope that only the company owner can do it, which distinguishes it from read-only chat tools such as get_chat_keeping.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly indicates the owner-only permission context and explains the default behavior when 'days' is omitted. It also warns to ask the owner before shortening retention. It does not explicitly name get_chat_keeping as the read-only alternative, so it falls short of full when-to-use/alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_chat_membersSet chat membersADestructiveInspect
Change a group's people, as its settings do — only its administrators may: 'add' puts colleagues in, 'admins' and 'notAdmins' make members administrators or not, 'remove' takes people out. Your own username in 'remove' is leaving the group, which anybody may. 'title' renames it. Applied in that order — add, admins, notAdmins, title, remove — and stopped at the first refusal, which is named; what came before it stays done. A direct chat has no members to change; a project's chat is whoever may open the project.
| Name | Required | Description | Default |
|---|---|---|---|
| add | No | Colleagues to add, by username or email. | |
| title | No | A new title for the group. | |
| admins | No | Members to make administrators, by username. | |
| chatId | Yes | The group's id. | |
| remove | No | Members to take out, by username. Your own is leaving. | |
| notAdmins | No | Administrators to make plain members, by username. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description discloses critical behavior: operations are applied in a fixed order, execution stops at the first refusal, and earlier successful changes remain applied. It also covers permission requirements and the special case of removing oneself.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then packs in operation order, permissions, failure behavior, and edge cases without filler. Every sentence carries information needed to invoke the tool correctly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, multi-parameter mutation with no output schema, the description provides the necessary operational context: permissions, parameter ordering, stop-on-first-refusal behavior, and chat-type applicability. Nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds interaction semantics by stating the exact application order (add, admins, notAdmins, title, remove) and the partial-failure behavior. It also reiterates the special meaning of one's own username in 'remove'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: changing a group's people, then enumerates the exact operations ('add', 'admins', 'notAdmins', 'remove', 'title'). It also distinguishes direct chats from project chats, so an agent can tell what the tool does and does not apply to.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly scopes usage to group membership changes, notes that only administrators may make changes, and rules out direct chats. It does not explicitly name sibling alternatives (such as create_chat or list_chats), but the usage context is otherwise clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_claimSet claimADestructiveInspect
Add a claim to a project's register, or change one — its kind, label, number in the paper, title, statement or bases. A claim is named by 'id', or by 'project' and 'label': one that does not exist yet is created (with 'statement'; 'status' says how far it is proved from the start, 'open' if left out, and 'reason' on what ground). An existing claim's status is NOT changed here — use set_claim_status, so the journal says why. A field left out keeps its value; 'bases' given replaces the whole list. Write the statement in Markdown with $…$ formulas. The label is the paper's \label: a letter, then letters, digits and ':', '.', '_', '-' — once per project, case aside; 'newLabel' renames it. Members of the project who may write only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | The claim to change, as list_claims returned it. Or name it by 'project' and 'label'. | |
| kind | No | One of the project's scale (list_claims answers its 'kinds'): theorem, lemma, proposition, corollary, conjecture or question on 'math'; position, conclusion, risk or obligation on 'law'. A new claim is the scale's first — a theorem, a position — unless said. | |
| bases | No | What it rests on, as a JSON array replacing the list: [{"kind":"page","page":477,"note":"§3"},{"kind":"computation","ref":"kimmy/gap/m74r5u"},{"kind":"lean","ref":"D5.rank_five","repo":"ispacex/d5"},{"kind":"source","ref":"Gupta 1990, Thm 2"},{"kind":"legal","document":31,"place":"Article 6(1)(f)"}]. A page is one you may open, by its id; a computation by the name a [comp:…] cites — a runner's job, or a page's saved cell 'wl:477/…/2'; a Lean declaration by its full name, and with 'repo' bound to where code search finds it in that repository of the project (find_lean_declaration) — only a bound declaration with a clean axiom audit lets the claim be 'lean'; a norm of law by the act's id on the legal shelf (list_legal_references gives it as the reference's document) — an act you may read — and the place in it, or none for the act as a whole. | |
| label | No | The claim's label, e.g. 'thm:d5-rank5'. | |
| title | No | A short name, e.g. 'Rank 5 is decided'; empty to clear. | |
| number | No | Its number in the paper, e.g. '5.8'; empty to clear. | |
| reason | No | For a new claim with a status: on what ground. | |
| status | No | For a NEW claim: its status on the project's scale — open, paper, computer, lean, refuted, retracted on 'math'; draft, agreed, practice, disputed, outdated on 'law'. Default the scale's first: open, draft. | |
| project | No | The project key, e.g. MATH. | |
| newLabel | No | A new label for an existing claim. | |
| statement | No | The statement, Markdown with $…$ formulas. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the destructiveHint=true annotation by explaining the actual destructive mechanism ('bases given replaces the whole list'), the patch semantics ('A field left out keeps its value'), the create-if-absent behavior, and the write-permission requirement. It also documents identity resolution (by id, or by project+label) and label uniqueness rules, which annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core verb and the sibling exclusion, and every sentence carries information. It is dense to the point of being a single wall of parentheticals, which costs a little parseability, but there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter upsert tool with no output schema, it covers creation, mutation, identity, formats, permissions and sibling routing. The one gap is that it never says what the call returns or what happens on a failed lookup/label clash, which matters given there is no output schema to fall back on.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema is the baseline, but the description adds real semantics not in it: replacement-vs-merge behavior for 'bases', Markdown/$…$ formatting for 'statement', the label grammar and per-project case-insensitive uniqueness, and the rename path via 'newLabel'. It stops short of adding anything for 'id' or 'number' beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Add a claim to a project's register, or change one') and enumerates the mutable fields. It also explicitly distinguishes itself from the nearest sibling by declaring that status is not changed here and pointing to set_claim_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit exclusion plus the alternative ('An existing claim's status is NOT changed here — use set_claim_status'), states the upsert condition ('one that does not exist yet is created'), and names the access precondition ('Members of the project who may write only'). Nothing about when to reach for it 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.
set_claim_scaleSet claim scaleADestructiveInspect
Choose the scale and kinds a project's claims are written on: 'math' (theorem, lemma, proposition, corollary, conjecture, question; open, paper, computer, lean, refuted, retracted) or 'law' (position, conclusion, risk, obligation; draft, agreed, practice, disputed, outdated). Free while the project has no claims. With claims, carry every status and every kind in use over to one of the new scale's by name — 'statuses' and 'kinds' as JSON objects, e.g. {"open":"draft","paper":"agreed"} and {"theorem":"position"}; ask the person which goes where, never guess. Each claim whose status moves gets a line in its journal with the change of scale and 'reason' as its ground. Nothing is carried into 'lean'. A page's blocks of the other scale's kinds stay boxes on the page and are no longer read into the register. Whoever configures the project (its lead or an administrator) only.
| Name | Required | Description | Default |
|---|---|---|---|
| kinds | No | With claims: each kind in use → one of the new scale's, as a JSON object. | |
| scale | Yes | 'math' or 'law'. | |
| reason | No | Why the scale changes — written into the journal of each claim it moves. | |
| project | Yes | The project key. | |
| statuses | No | With claims: each status in use → one of the new scale's, as a JSON object. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and readOnlyHint=false, and the description goes well beyond them: it discloses that each moved claim gets a journal line grounded in 'reason', that nothing is carried into 'lean', and that the other scale's blocks revert to unread boxes. It does not state irreversibility or what happens if a mapping is incomplete, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and scale vocabularies, then the migration rules, then permissions. Dense but nearly every sentence carries a constraint. Slightly run-on in the mid-section where mapping and journal effects are packed together.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, permission-gated configuration tool with no output schema, the description covers side effects, authorization, mapping requirements, and edge cases (lean exclusions, orphaned blocks). An agent has everything needed to call it correctly or to stop and ask a human.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds real value: it constrains 'statuses' and 'kinds' to one entry per status/kind in use and gives concrete JSON examples ({"open":"draft"}, {"theorem":"position"}), plus explains that 'reason' becomes the journal ground. It doesn't clarify the 'lean' exclusion at the parameter level, so not a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource: 'Choose the scale and kinds a project's claims are written on.' It then enumerates the two scales and their full vocabularies, so an agent knows exactly what domain this operates on and can separate it from siblings like set_claim or set_claim_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the free case ('Free while the project has no claims') versus the migration case ('With claims, carry every status and every kind in use...'), names the permission boundary ('its lead or an administrator'), and gives a hard behavioral rule: 'ask the person which goes where, never guess.' When-to-use and constraints are unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_claim_statusSet claim statusADestructiveInspect
Move a claim on its project's scale — open, paper, computer, lean, refuted, retracted on 'math'; draft, agreed, practice, disputed, outdated on 'law' — with the ground it moved on in 'reason' (a merge, a computation that finished, a reviewer's word, the issue it was decided in). 'lean' is refused unless every Lean basis of the claim is bound to its code and its latest axiom audit is clean (report_lean_audit). The journal keeps the line: who, when, from what to what and why; this is the one place a status changes, so the paper and the site that read it agree. Name the claim by 'id', or by 'project' and 'label'. The same status again changes nothing. Members of the project who may write only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | The claim, as list_claims returned it. | |
| label | No | The claim's label, with 'project'. | |
| reason | No | On what ground — at most 1000 characters. | |
| status | Yes | A status of the project's scale (list_claims answers its 'statuses'). | |
| project | No | The project key, with 'label'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, and the description adds real behavioral value beyond them: a journal entry recording who/when/from-what/to-what/why, idempotency on repeat, refusal of 'lean' without audit, and permission scoping. It does not explain that the destructive hint refers to overwriting the previous status value or whether history is retrievable, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: the status vocabulary and the naming scheme come first, then conditions, then authority. Some clauses (the journal/consistency sentence) are editorially rich, though each carries usable semantics.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-param mutation with no output schema, the description covers the status domain, identity scheme, the one gating rule, idempotency, side effects (journal, downstream paper/site), and permissions. Only minor gaps remain: no explicit error behavior on invalid status or missing claim, and no note on whether a reason is required for certain transitions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already carries parameter meaning (id vs project+label pairing, reason max 1000 chars, statuses from list_claims). The description reinforces the id-or-project+label alternative and gives examples of what 'reason' should contain, but adds little beyond the schema. Baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (move a claim's status) and enumerates the exact allowed statuses per scale ('math' vs 'law'), which distinguishes it from sibling setters like set_claim_scale or set_claim. An agent can tell precisely 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'this is the one place a status changes', names the precondition for the 'lean' status (basis bound to code, clean axiom audit, report_lean_audit), states idempotency ('the same status again changes nothing'), and names the authorization requirement (project members who may write). Strong when/eligibility guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_environmentsSet environmentsADestructiveInspect
Make a project's environments exactly this list, in this order — the last is where finished work ends up. An environment is one of the places a project's work is put out to — 'dev', 'staging', 'prod' — in order; the LAST one is where finished work ends up. A deployment is a pipeline saying «this went out, there». Each issue it carried then says where it lies ('deployedTo' on get_issue), gets one history line per environment, and the project's rules with trigger 'deployed' run on it. A name the project already has is kept as it is, with what was deployed there; a name it does not have is added; and an environment LEFT OUT is removed together with the record of what was deployed to it and any rule waiting for it. So to rename one, add the new name and tell the person — there is no rename here. Project lead or admin only.
| Name | Required | Description | Default |
|---|---|---|---|
| names | Yes | The environments in order, comma-separated: 'dev,staging,prod'. Each is one word of letters, digits, dots, dashes and underscores. An empty string removes them all. | |
| projectKey | Yes | Project key, e.g. 'ONB'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the destructiveHint annotation to explain exactly what is destroyed: omitted environments are removed along with deployment records and waiting rules. It also describes downstream effects (deployedTo on issues, one history line per environment, 'deployed' rule triggers) and that existing names are preserved with their deployments.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core mutation semantics are front-loaded and most sentences carry real information. However, 'the last is where finished work ends up' is stated twice and the deployment explanation could be tightened for a two-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a destructive, full-replacement mutation with annotations, a fully documented two-parameter schema, and no output schema, the description supplies everything an agent needs: permissions, ordering rules, preservation/deletion behavior, side effects, and rename guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so format is already documented, but the description adds substantive meaning: ordering matters, the last entry is the terminal environment, existing names are kept, new names are added, and omissions trigger deletion. It also clarifies the empty-string case beyond the schema's bare statement.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Make a project's environments exactly this list') and immediately clarifies ordering semantics and what the last entry means. It is clearly distinguishable from the read-only sibling list_environments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for use: full replacement of the environment list, admin/lead requirement, and an explicit rename workaround ('add the new name and tell the person — there is no rename here'). It does not explicitly route to list_environments for reading, but the when-to-use and when-not-to-rename guidance is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_issue_fieldsSet issue fieldsADestructiveInspect
Fill in a project's own columns on one issue, by their NAMES: 'Segment=AI; Country=Poland; Started=2026-08-01', or a JSON object. A country column takes the country's name or its two-letter code. A link column takes issue keys, wiki pages (a page's address or page:471) and claims (a label like thm:main, or claim:12), comma-separated, and REPLACES the records you can see with them — records you cannot open stay. An empty value clears the field, which is not the same as an empty one. A value that does not fit the field's kind — an option nobody offered, a date that is not one, a country that is neither — refuses the WHOLE call rather than writing part of it.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Issue key, e.g. 'CRM-1'. | |
| values | Yes | Field names to values, as 'Segment=AI; Country=Poland' or a JSON object. List values are given by option name, people by username, dates as 2026-08-21. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations flag destructiveHint=true, and the description earns that: it discloses that link columns REPLACE visible linked records while records you cannot open stay, that an empty value clears rather than stores empty, and that an invalid value refuses the WHOLE call instead of partially writing. This is exactly the destructive/atomicity context annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four front-loaded sentences, each carrying distinct information: format syntax, value-kind rules, replacement semantics, atomic failure. Dense with parenthetical examples but no filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A destructive mutation with no output schema, and the description covers input format, destructive scope, clear-vs-empty distinction, and failure behavior. Remaining gaps are permissions requirements and what a successful response contains, which are minor given the annotation coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema for `values`: country names or two-letter codes, link syntax (issue keys, wiki pages, page:471, thm:main, claim:12), comma separation, and empty-value semantics. Only field-name discovery (list_project_fields) is left unaddressed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Fill in a project's own columns on one issue'), which distinguishes custom-field writes from generic issue updates. It does not name the closest sibling (update_issue) so the boundary must be inferred from 'project's own columns'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The opening clause makes the intended context clear: setting a project-specific custom field on a single issue, with example syntax supplied. There is no explicit 'do not use this for standard fields, use update_issue instead' exclusion, so the agent must infer the routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_issue_scheduleSet issue scheduleADestructiveInspect
Add a recurring issue to a project, or change the one named by 'id' — the WHOLE of it as you write it here: what you leave out of a change is cleared, not kept. From 'nextDay' on, every 'every' weeks or months, the project files this issue at nine in the morning on YOUR clock and in YOUR name: with your access, through the same rules, notifications and watchers as an issue you filed yourself. In 'summary', {date}, {month}, {quarter} and {year} are read off the day it is filed ('VAT return {quarter}' → 'VAT return Q4 2026'). If the one filed before is still open, the new one is filed all the same and linked to it. A day missed — a paused project — files once when it can, never a backlog. Refused, with the reason, if the issue could not be filed as described today (an unknown type, an assignee nobody has). The project's lead, the company's owner or an admin only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | The schedule to change, as list_issue_schedules returned it. Leave out to add one. | |
| type | No | Issue type name, one of the project's. 'Task' where nothing is said. | |
| unit | No | 'month' (the default) or 'week'. | month |
| every | No | Every how many units: 1 (the default), 3 for a quarter, 12 for a year. Up to 52 weeks or 24 months. | |
| labels | No | Labels as 'a,b'. | |
| enabled | No | false to keep it switched off. Default true. | |
| nextDay | Yes | The first day it files on, YYYY-MM-DD, today or later on your clock. For months, its day of the month is the day kept (the 31st is a short month's last day). | |
| project | Yes | The project key, e.g. PM. | |
| summary | Yes | The filed issue's title; {date}, {month}, {quarter}, {year} are filled in on the day. | |
| assignee | No | Assignee username or e-mail. Nobody where nothing is said. | |
| priority | No | Priority name, e.g. 'High'. | |
| dueInDays | No | The filed issue's due day, as a number of days after the day it is filed — 19 makes an issue filed on the 1st due on the 20th. A count, not a day of the month. Leave out for no due day. | |
| description | No | The filed issue's description, Markdown; [~username] mentions notify each time. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses replace semantics ('what you leave out of a change is cleared, not kept'), the filing cadence and local-time behavior, that the issue is filed under the caller's identity with the same rules, notifications and watchers, template placeholder expansion, overlap handling (new issue filed anyway and linked), paused-project catch-up behavior, and validation refusal with a reason. These are exactly the consequences an agent needs before invoking a destructiveHint tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The action and the omit-clears warning are front-loaded, and every sentence carries operational information. It is long and uses some emphatic phrasing ('the WHOLE of it as you write it here', 'on YOUR clock'), but the length is justified by the 13 parameters and the destructive upsert behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive 13-parameter upsert with no output schema, the description covers authorization, replace semantics, cadence, template expansion, overlap behavior, catch-up behavior and failure modes. The main gap is that it does not say what is returned on success (e.g. the schedule id or the created schedule), leaving the agent to infer the response shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds cross-parameter meaning the schema does not: that 'nextDay' combined with 'every' defines the cadence, that omitted fields are cleared on update (not left as-is), and that summary placeholders are resolved on the filing day. It does not add anything for individual fields like dueInDays or labels beyond what the schema already says.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence gives a specific verb and resource ('Add a recurring issue to a project') and immediately covers the update case ('or change the one named by id'). An agent can distinguish this upsert-style schedule tool from list_issue_schedules and delete_issue_schedule without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states the add-vs-change condition keyed on 'id' and names the authorization gate ('The project's lead, the company's owner or an admin only'). It does not explicitly name list_issue_schedules as the way to obtain the id, though the schema does, so this falls short of a full when/when-not/alternatives treatment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_jira_connectionSet Jira connectionADestructiveInspect
Switch a project's Jira connection on or off, keeping its token — and, with 'confluence', whether the same site's Confluence is read too. Off, nothing reads that Jira or writes to it — the issue screen, the agents, the status sync — and issues keep their keys there. Switched on, the held token is asked of the site first and refused with the site's reason if it no longer opens it. Connecting a Jira, or giving a new token — Confluence's own included — is done on the board's Jira sheet (get_jira_connection's 'url'), never here. For whoever administers the project.
| Name | Required | Description | Default |
|---|---|---|---|
| enabled | No | true to switch the connection on, false to switch it off. Leave out to keep it as it is. | |
| confluence | No | true to read the same site's Confluence too, false to stop. Leave out to keep it as it is. | |
| projectKey | Yes | Project key, e.g. 'PM'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it spells out the blast radius of turning off (issue screen, agents, status sync stop reading/writing) and the non-destructive side effect (issue keys are preserved). It also discloses that enabling re-validates the held token against the site and surfaces the site's refusal reason, which is exactly the failure mode an agent needs to anticipate. Consistent with destructiveHint=true and openWorldHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the toggle and the token-preservation guarantee, and every clause carries information. The em-dash-heavy phrasing is denser than necessary — 'Off, nothing reads that Jira or writes to it — the issue screen, the agents, the status sync —' could be tightened — but nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive admin toggle with full annotation coverage, 100% schema descriptions and no output schema, the description supplies everything missing: consequences of both directions, token retention, validation-on-enable, and where the out-of-scope operations live.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (baseline 3), and the description adds real semantics on top: the token is retained across the switch, and 'confluence' means reading the *same site's* Confluence. It reinforces that omitting a flag leaves state unchanged. It doesn't add format-level detail, but little is needed for two booleans.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('switch a project's Jira connection on or off') and immediately scopes what the toggle governs, including the 'confluence' sub-behavior. It explicitly distinguishes itself from get_jira_connection and from the board's Jira sheet, which handles connecting and new tokens.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a hard exclusion ('Connecting a Jira, or giving a new token ... is done on the board's Jira sheet (get_jira_connection's "url"), never here') and names the sibling that owns that job. It also states the audience ('For whoever administers the project'), so an agent knows the required authority level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_jira_linkSet Jira linkADestructiveInspect
Say which issue of the project's own Jira this issue is: its key (ACME-123) or its link on the site. The key is asked of that Jira first — one it does not have, or the token cannot see, is refused. An empty 'jiraKey' removes the link. One Jira issue per issue; the change is a line in the issue's history. Needs a Jira connected to the project and permission to edit the issue.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Issue key here, e.g. 'PM-12'. | |
| jiraKey | No | The Jira issue: 'ACME-123' or 'https://acme.atlassian.net/browse/ACME-123'. Empty removes the link. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint=true, openWorldHint=true), the description discloses validation behavior (the key is checked against the remote Jira first, unknown/invisible keys are refused), the deletion path via empty jiraKey, the one-link constraint, prerequisite auth (connected Jira, edit permission), and that the change is recorded in issue history. This is the extra context the annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, all load-bearing: action, validation, removal path, constraints. Front-loaded with the core action; only the opening 'Say which issue...' phrasing costs a little directness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation with annotations already covering the safety profile and no output schema, the description covers prerequisites, validation, refusal, and removal adequately. It stops short of stating what confirmation the caller receives after a successful set, a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds meaning: the header key identifies the target issue while 'jiraKey' is validated against the linked Jira before acceptance, and an empty value is a removal signal rather than an error. That validation semantics is not expressed in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete action (attaching the project's own Jira issue to this issue) and the accepted identifier forms, which separates it from read-oriented siblings like get_jira_link or search_linked_jira. The phrasing 'Say which issue ... this issue is' is slightly indirect, but the resource and effect are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear conditions: an empty 'jiraKey' removes the link, one Jira issue per issue, and a Jira must be connected with edit permission. It does not name sibling alternatives (e.g., set_jira_connection, get_jira_link) explicitly, so routing is inferable rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_jira_syncSet Jira syncADestructiveInspect
Set how a project keeps its statuses in step with its own Jira: the direction and the pairs of statuses. Either left out keeps what is there. Moves on either side go through that side's own workflow and are never forced: a move one refuses is left undone and said on the issue (get_jira_link's 'sync'). A move made here because Jira moved is made in YOUR name from now on — whoever saves this is whom it acts for — and Jira's history names the project token's owner. Switching it on moves nothing by itself: the next change on either side does. Both sides moved before the two were compared: neither is moved, and the issue says so. The site's webhook (quicker than the five-minute poll) is set up on the screen, since its address is a secret. For whoever administers the project; needs the connection switched on, with its token.
| Name | Required | Description | Default |
|---|---|---|---|
| pairs | No | The pairs, here=there, separated by ';' or new lines: 'To Do=To Do; In Progress=In Progress; Done=Done'. A status may appear in several pairs; the first one in order is where a move goes. An empty string clears them. Omit to keep. | |
| direction | No | 'off', 'both', 'from_jira' or 'to_jira'. Omit to keep. | |
| projectKey | Yes | Project key, e.g. 'PM'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the annotations: moves traverse each side's own workflow and are never forced, refused moves are left undone and reported on the issue, and the acting identity is the saver (Jira history names the token owner). It also discloses that omitted fields keep their current values. Remaining gap: it does not spell out that an empty pairs string wipes the mapping (only the schema says this).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded, but the middle is dense and hard to parse ('Both sides moved before the two were compared: neither is moved, and the issue says so'). Several sentences carry essential semantics but the phrasing costs re-reads for a three-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, open-world mutation with no output schema, the description covers prerequisites, attribution, conflict resolution and the side effect timing well. It does not describe what the call returns on success, which is the one thing an output schema would otherwise have supplied.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents the 'here=there; ...' pair syntax, the direction enum values and 'omit to keep'. The description restates the pair/direction intent and the keep-on-omit default but adds no format or edge-case meaning beyond the schema, so baseline 3 is right.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a concrete verb+resource: 'Set how a project keeps its statuses in step with its own Jira: the direction and the pairs of statuses.' An agent immediately knows this writes sync configuration. It does not explicitly contrast with the sibling reads (get_jira_sync, get_jira_connection), so differentiation is only implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives real preconditions: 'For whoever administers the project; needs the connection switched on, with its token,' plus 'Switching it on moves nothing by itself: the next change on either side does.' It never names a sibling as an alternative (get_jira_sync for reading, set_jira_connection for the token/site), so explicit routing is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_personSet personADestructiveInspect
Add a person to a project's register, or change the one named by 'id': add spellings and facts, remove them, change the name shown or the note, and confirm or reject a proposed person with 'state'. A spelling or fact given with 'source' (the page, issue or comment you READ it in: 'page:471', 'PM-12', 'comment:88', 'wikicomment:7' or an address) and 'quote' (the source's own words that hold it) is checked now, and refused if the quote is not there or does not hold it. One without a source or quote is written UNCHECKED and the answer's 'unchecked' lists it — so write a name from memory only when the person asked for it, and never invent initials. A spelling the person already has is written over with the source you give. What you leave out stays. A person written here is confirmed at once. Members of the project who may write only. Only where the company's plan includes AI.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | The person to change, as list_persons or find_person returned them. Leave out to add one. | |
| name | No | The name shown first — one of the person's spellings, e.g. 'Гупта'; a new one becomes a spelling. | |
| note | No | Why this person is here, in a line — at most 600 characters. | |
| facts | No | Facts to add, as a JSON array: [{"kind":"born","value":"1938","source":"page:471","quote":"…(1938–2019)…"}]. 'kind' is born, died (a year or a date), wikidata (Q…), mathGenealogy, mrAuthor (digits) or orcid. | |
| state | No | 'confirmed' or 'rejected' — to decide a proposed person. | |
| project | No | The project key, for a new person. | |
| spellings | No | Spellings to add, as a JSON array: [{"text":"N. D. Gupta","form":"full","source":"page:471","quote":"N. D. Gupta, The dimension subgroup conjecture…","place":"Источники"}]. 'form' is 'full', 'surname' or 'inflected' (a declined form, «Гупты»); left out, it is worked out. | |
| removeFacts | No | Facts to remove, as 'kind:value', comma-separated — 'born:1938'. | |
| removeSpellings | No | Spellings to remove, by their text, comma-separated. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the destructiveHint=true annotation: it discloses the verification gate (refused if the quote is absent or doesn't contain the fact), the UNCHECKED fallback and the response's 'unchecked' list, that existing spellings are overwritten with the supplied source, that omitted fields are left untouched, immediate confirmation, plus write-permission and plan gating.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then dense but purposeful rules; near every sentence adds a decision-relevant constraint. The middle section is a long run-on chain of clauses that could be broken into shorter sentences for scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With nine optional parameters and a destructive mutation, the description covers permissions, plan gating, validation behavior and partial-update semantics. Since there is no output schema, the response shape is only sketched via the 'unchecked' field, leaving the rest of the return payload unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description earns more by explaining cross-parameter semantics the schema doesn't: source formats ('page:471', 'PM-12', 'comment:88'), what makes a quote valid, and the overwrite rule when a spelling already exists. It stops short of clarifying precedence between name and spellings or the interaction of state with id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening clause states a specific verb and resource: 'Add a person to a project's register, or change the one named by id', and enumerates the sub-operations (spellings, facts, name, note, state). It implicitly separates from delete_person/merge_persons by being additive/mutating, but it never addresses the obvious overlap with the sibling decide_persons, which the 'state' parameter partially duplicates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete conditional rules: attach source+quote when you read the fact somewhere, write unchecked only when the person asked for it, never invent initials, and leave fields out to preserve them. It does not, however, say when to call decide_persons instead of passing state='confirmed'/'rejected' here.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_project_fieldSet project fieldADestructiveInspect
Add a column to a project, or edit the one that already has this name. Keyed by name rather than by id: 'make sure there is a Segment field with these options' is the request, and a name is what you just read. A field's KIND cannot be changed once it exists. Project lead or admin only.
| Name | Required | Description | Default |
|---|---|---|---|
| icon | No | The glyph that mark wears, from the palette list_project_fields returns. Not for a country field: that one marks a card with the flag of the country the issue holds, so passing an icon is refused rather than ignored. | |
| kind | No | What it holds: 'text', 'number', 'date' (a day), 'datetime' (a day and a time, written like 2026-10-01T19:30+03:00), 'user', 'select' (a list), 'country' (a country, written as its name or its two-letter code and shown with a flag) or 'link' (issues and wiki pages, one or several — what a row is confirmed by). Required when creating; ignored when the field already exists, since a kind cannot change. | |
| name | Yes | Field name, e.g. 'Segment'. An existing field with this name is edited rather than duplicated. | |
| newName | No | Rename the field to this. Leave out to keep the name. | |
| options | No | For a list: its options, as 'AI:green, Skins:orange, GameCards' or a JSON array of {name, color}. A colour is optional and must be one of: orange, amber, red, pink, purple, blue, teal, green. Options left out are REMOVED — send the whole set. | |
| showIcon | No | Mark a board card when this field has a value: true to switch the mark on, false off. Leave out to keep it as it is. | |
| issueType | No | Keep the field for issues of one type only, by name — e.g. 'Показ' — or '' for every type. Leave out to keep it as it is. | |
| projectKey | Yes | Project key, e.g. 'CRM'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, so the description's job is to add context, and it does: the auth requirement (project lead/admin) and the fact that a field's KIND is frozen after creation. Those are exactly the non-obvious behavioral facts an agent needs before calling. It doesn't spell out the destructive consequence of omitting options (that sits only in the schema), which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action before the addressing rationale and the constraints. The quoted example earns its place by illustrating upsert intent. Slightly conversational phrasing ("a name is what you just read") is the only minor cost.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter destructive upsert with no output schema, the description supplies the critical missing pieces: auth gating, kind immutability, and the create-or-edit rule. Return behavior is left implicit, but with no output schema that is 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter including icon, kind, options, showIcon and issueType is already documented in detail. The description only reinforces the name-keying and kind immutability; it adds no new semantics about the eight parameters. Baseline 3 applies when the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb pair and resource: "Add a column to a project, or edit the one that already has this name" — the upsert semantics are unambiguous. It also explains the name-keyed addressing rationale, which separates it from any id-based update path. It never names a sibling tool (e.g. delete_project_field or list_project_fields) as the alternative, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a real invoking scenario ("make sure there is a Segment field with these options") and makes the create-vs-edit decision automatic via the name key. It also states the permission prerequisite ("Project lead or admin only") and the immutability constraint on kind. It does not route the agent to a sibling for cases this tool cannot handle.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_project_issue_typeSet project issue typeADestructiveInspect
Add an issue type of this project's own — e.g. 'Показ' — or rename one it already has. Keyed by name. The shared types (Epic, Story, Task, Bug, Sub-task, Client) are every project's and cannot be renamed here. Another project never sees this type. Project lead or admin only.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The type's name. An own type of this project with this name is renamed (with newName) rather than duplicated. | |
| newName | No | Rename the type to this. Leave out to add or keep it. | |
| subtask | No | When adding: true for a sub-task type, whose issues hang off a parent. Cannot be changed afterwards. | |
| projectKey | Yes | Project key, e.g. 'TH'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and openWorldHint=false; the description adds genuinely non-obvious behavior — name acts as an identity key so an existing type is renamed rather than duplicated, and the type is project-scoped so other projects never see it. It does not spell out what happens on a rename collision or that renaming can break existing issue references, which is the remaining gap for 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the primary action, then constraints, then permissions — no filler. The Cyrillic example ('Показ') is a slightly noisy illustration but does not obscure meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and only four parameters, the description covers purpose, identity semantics, scoping, and authorization — enough to call it correctly. It stops short of describing the return value or conflict behavior when newName already exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters including the subtask immutability rule. The description's 'Keyed by name' reinforces the identity semantics of the name/newName pair but adds no syntax or format detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise compound action — add a project-own issue type or rename an existing one — plus the keying mechanism ('Keyed by name'). It also explicitly carves out the shared built-in types (Epic, Story, Task, Bug, Sub-task, Client), which separates it from both delete_project_issue_type and the set_project_field family.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear preconditions: project lead or admin only, and shared types cannot be renamed here. It doesn't name the alternative tool or endpoint for the shared-type case, so the agent knows when this tool is wrong but not where to go instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_project_parentSet project parentADestructiveInspect
Make an existing project a subproject of another, or take it back out with an empty parentKey. This is about ACCESS, not about names or issues: everyone who may reach the parent may reach the subproject too, in the role they hold there. Nothing is renamed, no issue moves, and the keys stay ordinary keys. Attaching needs an admin or somebody who leads BOTH projects, since neither can be volunteered by whoever leads the other; detaching needs a lead of either, since it only takes access away. One level: a subproject cannot have subprojects.
| Name | Required | Description | Default |
|---|---|---|---|
| parentKey | No | Key of the project it becomes a subproject of, e.g. 'KYC'. Leave it out (or empty) to detach it and leave it a project of its own. | |
| projectKey | Yes | Key of the project to move, e.g. 'KYCB2B'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnly=false and destructive=true; the description goes much further, explaining that access is inherited by everyone who can reach the parent, that nothing is renamed or moved, the exact permission requirements for attach vs detach, and the one-level nesting limit. That is precisely the extra behavioral context the annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and the access-vs-naming distinction, then permission requirements, then the one-level constraint. Five short sentences, each carrying distinct information with no repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and only two annotations, so the description must carry the behavioral burden, and it does: it covers effects on access, absence of side effects on names/issues/keys, authorization rules for both directions, and nesting limits. An agent can call this correctly without further context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, including the detach-by-empty-parentKey semantics, so the description adds little new parameter meaning beyond restating that an empty parentKey detaches. Baseline 3 is appropriate when the schema already documents both parameters fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (make a subproject / detach) and resource (project) and immediately frames the scope as access control rather than renaming or issue movement. That framing makes it clearly distinct from siblings like move_issue, set_project_public, or create_project.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit conditions for both directions: attaching requires an admin or a lead of BOTH projects; detaching requires a lead of either; empty parentKey means detach. It doesn't name an alternative sibling tool by name, which keeps it just short of a 5, but the when-to-use guidance is unusually concrete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_project_publicSet project publicADestructiveInspect
Open a project to be READ by anybody — nobody signed in, or somebody who does not work in the company — or close it again. Opened, its board, issues, comments, attached files and wiki can be linked to from anywhere; nobody outside can write in it, people's email addresses are never shown, and the company's other projects and the project's own subprojects stay closed (a subproject has its own switch). Closing takes effect at once. Only an open source project may be opened — one created or configured with a public repository (create_project's openSourceRepo, connect_repository with openSource, or the project's repositories screen) — and it is closed by itself if that repository stops being public. Only the project's lead (or its parent's, or an admin) may do either, and both are written to the company's journal. Confirm with the person before opening: everything already in the project becomes public.
| Name | Required | Description | Default |
|---|---|---|---|
| indexed | No | Optional, for a public project: true lets search engines index it (its issues and pages go into the sitemap), false asks them not to. Off until somebody turns it on; leave it out to keep it as it is. | |
| isPublic | Yes | true to open it to be read by anybody, false to close it. | |
| projectKey | Yes | Key of the project, e.g. 'LIB'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and the description justifies it with concrete consequences: everything already in the project becomes public on open, nobody outside can write, email addresses are never hidden-exposed, subprojects and sibling projects stay closed, and the project auto-closes if the repo stops being public. It adds audit (both directions written to the company journal) and timing ('closing takes effect at once') detail that annotations alone do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The operation is front-loaded in the first clause, followed by scope, constraints, and authorization in descending priority. The sentences are long and dense with parentheticals, which costs a little readability, but essentially no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, permission-gated mutation with no output schema, the description covers the prerequisites, authorization model, blast radius, side effects, audit trail, and revocability. An agent has everything needed to decide whether to call it and what to warn the user about.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so projectKey, isPublic, and indexed are already documented in the schema. The description reinforces isPublic semantics and constrains which projectKey values are eligible, but adds no syntax or format detail beyond the schema. Baseline 3 is appropriate when the schema carries the parameter burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a precise bidirectional operation on a specific resource: open a project to be read by anybody, or close it again. It also delineates the scope of what 'public' covers (board, issues, comments, files, wiki), which separates it from adjacent tools like set_repository_open_source or set_wiki_page_readers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit preconditions and alternatives are given: only a project with a public repository may be opened, and the description names the concrete ways that state arises (create_project's openSourceRepo, connect_repository with openSource, or the repositories screen). It also names the required authorization (project lead, parent lead, or admin) and an explicit behavioral instruction to confirm with the person before opening.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_repository_open_sourceSet repository open sourceADestructiveInspect
Mark a repository already connected to a project as the project's open source repository, or take the mark off. Marking asks its host, without a token, whether anybody can read it and under which licence, and is refused for a private one. Taking the mark off the last marked repository of a public project closes the project to readers outside at once, as the screen does — confirm with the person first. Only the project's lead, a board administrator or a company admin may; both are written to the company's journal.
| Name | Required | Description | Default |
|---|---|---|---|
| openSource | Yes | true to mark it open source, false to take the mark off. | |
| projectKey | Yes | Key of the project, e.g. 'LIB'. | |
| repository | Yes | The repository: its id from list_repositories, or its path, e.g. 'owner/repo'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by explaining that marking queries the host without a token, that private repositories are refused, that removing the last mark of a public project immediately closes reader access, that confirmation is expected, that only specific roles may perform the action, and that both outcomes are journaled. These details materially help an agent understand the destructive side effects and authorization constraints already hinted at by destructiveHint and openWorldHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and dense with useful operational context, covering the toggle, host check, destructive closure warning, permission requirements, and journaling. It could be slightly easier to scan if structured, but every sentence contributes to correct invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no output schema and complete parameter schema coverage, the description supplies the critical missing context: preconditions, refusal behavior, authorization, audit logging, and the confirmation requirement for the destructive edge case. An agent has enough information to invoke it safely and correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented in the input schema, including the boolean meaning of openSource and the expected repository identifier. The description reinforces the toggle semantics but does not add parameter-level meaning beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: marking or unmarking a repository already connected to a project as that project's open source repository. It also distinguishes this from connecting a repository by specifying that the repository must already be connected, so an agent can route correctly without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: marking checks whether the host is publicly readable and is refused for private repositories; unmarking the last open source repository of a public project immediately closes external access and should be confirmed first. It also states the required roles. It stops short of explicitly naming sibling alternatives such as set_project_public or connect_repository, but the when/when-not guidance is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_sourceSet sourceADestructiveInspect
Add a source to a project's register, or change one — its key, authors, title, year, venue, identifiers or PDF — or say how far it is checked. A source is named by 'id', or by 'project' and 'key': one that does not exist yet is created (with 'title'), unchecked. A field left out keeps its value and an empty one clears it; 'authors' given replaces the whole list. Identifiers are kept in one shape whatever they are pasted as (arXiv without 'arXiv:' and with its version, a DOI without https://doi.org/, 'MR' and digits, zbMATH without 'Zbl', an ISBN's digits with its checksum held), and each is once per project — a second source with the same one is refused, naming the first. 'check' moves the check by hand, with a line in its journal: 'manual' (you checked it against the original — say against what in 'reason'), 'mismatch' (it disagrees with what it names — 'reason' says how; required) or 'unchecked'; 'api' is written only by the check against the services. Changing the authors, title, year, venue or an identifier of a checked source takes it back to unchecked: what was checked is no longer there. Members of the project who may write only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | The source to change, as list_sources returned it. Or name it by 'project' and 'key'. | |
| mr | No | The Mathematical Reviews number, e.g. 'MR1234567'. | |
| doi | No | The DOI, e.g. '10.4007/annals.2024.199.1.3'. | |
| key | No | The source's key, e.g. 'IMP26' — a letter or digit, then letters, digits and ':', '.', '_', '-', '+'; once per project, case aside. | |
| isbn | No | The ISBN, ten or thirteen digits. | |
| year | No | The year it appeared; 0 clears it. | |
| arxiv | No | The arXiv id, with its version where it matters: '2301.01234v3', 'math/0601001'. | |
| check | No | How far it is checked, by hand: 'manual', 'mismatch' or 'unchecked'. | |
| title | No | Its title. | |
| venue | No | The journal, series or publisher, e.g. 'Ann. of Math.'. | |
| newKey | No | A new key for an existing source. | |
| reason | No | With 'check': against what it was checked, or how it disagrees — at most 1000 characters. | |
| zbmath | No | The zbMATH number, e.g. '1234.56789'. | |
| authors | No | Its authors in the work's order, as a JSON array replacing the list: [{"name":"N. D. Gupta"},{"name":"S. Sidki","person":42}] — 'name' as the work prints it, 'person' a person of the project's register you may see (find_person), optional. A person without a name takes the name the register shows. | |
| project | No | The project key, e.g. MATH. | |
| pdfAttachment | No | Its PDF: the id of an issue's attachment you may open; 0 takes the PDF off. | |
| pdfWikiAttachment | No | Its PDF: the id of a wiki page's attachment you may open; 0 takes the PDF off. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses important mutation behavior: omitted fields keep values, empty fields clear them, authors replace the whole list, identifiers are normalized and unique per project, and changing checked bibliographic data reverts the check to unchecked. It also states the permission boundary and the refusal behavior for duplicate identifiers.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is dense but front-loaded, beginning with the main action and then covering creation, field semantics, identifiers, check state, and permissions. Despite its length, every sentence carries necessary behavioral or parameter information for a complex 17-parameter mutation tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex write tool with rich annotations and a fully described schema, the description covers creation, update, field clearing/replacement, uniqueness constraints, check-state transitions, and authorization. No output schema exists, but the description is complete enough for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, but the description adds significant cross-parameter meaning, including create-vs-update identification, empty-field clearing, full replacement of authors, identifier normalization rules, and check/reason interactions. It does not fully clarify every parameter, such as newKey versus key or the two PDF attachment variants, but it adds substantial value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise verb and resource: add or change a source in a project's register, including fields and check status. This clearly distinguishes it from read-only siblings like get_source/list_sources and destructive delete_source.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains the creation path when no matching source exists and how a source is identified by 'id' or 'project' plus 'key'. It gives clear usage context but does not explicitly name alternatives or when-not-to-use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_termSet termADestructiveInspect
Add a term to a project, or change the one named by 'id' — and confirm or reject a proposed one with 'state'. On a change, what you leave out stays as it is. A term written here is confirmed at once. 'variants' REPLACES the other spellings: send all of them — for a word that declines, the forms running text uses ('размерной подгруппы', 'размерных подгрупп'), since a text is matched by these and not by a stemmer. 'source' is the wiki page or issue that defines it — 'page:471', 'PM-12' or its address — and must be one you can open; an empty string removes it. Members of the project who may write only. Only where the company's plan includes AI.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | The term to change, as list_terms returned it. Leave out to add one. | |
| kind | No | What sort of thing it is, in the project's words — 'условие', 'спецификация', 'понятие'. | |
| name | No | The term as written, e.g. 'PW06' or 'Размерная подгруппа'. | |
| place | No | The heading on the source it stands under. | |
| state | No | 'confirmed' or 'rejected' — to decide a proposed term. | |
| source | No | The page or issue that defines it: 'page:471', 'PM-12' or its address. '' removes it. | |
| project | No | The project key, for a new term. | |
| variants | No | Its other spellings, one per line or comma-separated. | |
| definition | No | What it means — one or two short sentences, Markdown, $…$ for formulas; at most 600 characters. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations' destructiveHint, it discloses that a written term is confirmed immediately, that omitted fields are preserved on change, that 'variants' fully replaces existing spellings, that an empty 'source' removes it, and that access is gated by write permission and AI plan. This is rich, specific behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core actions before adding caveats, and every sentence carries operational detail. It is dense and could be split for readability, but it is not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the add/change/decide flows, replacement semantics, source handling, permission gating, and plan gating for a 9-parameter mutation tool with no output schema. Nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3, but the description adds meaning for 'id', 'state', 'variants', and 'source' (replacement semantics, examples, empty-string behavior) beyond the schema. Other parameters like 'kind', 'name', 'place', 'project', and 'definition' rely largely on the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States specific actions (add, change, confirm/reject) on the resource 'term' and distinguishes adding from changing via 'id'. It does not explicitly contrast itself with sibling tools like define_term or decide_terms, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains when to omit 'id' to add a term, when to use 'state' to decide a proposed term, and that omitted fields remain unchanged on updates. It also states prerequisites (write membership, AI plan), but does not name alternative tools or say when not to use this one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_trackSet trackADestructiveInspect
Declare a track on a project, or edit the one that already has this tag. The tag is the LABEL issues carry to join it ('cherry-orchard'), so it cannot contain a space — labels are stored space-separated. The name is what a reader sees ('The Cherry Orchard'); leave it out and the tag speaks for itself. Declaring a track writes nothing to any issue: the ones already carrying the label are in it at once. Needs permission to write in the project.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | Yes | The label that puts an issue in this track, e.g. 'cherry-orchard'. No spaces. An existing track with this tag is edited rather than duplicated; matched exactly, so 'Hamlet' and 'hamlet' are two tags, as they are two labels. | |
| icon | No | One or two emoji shown BESIDE the name, never instead of it. Leave it out to keep what is there; send an empty string to take it off. Anything that is not an emoji is refused rather than ignored. | |
| name | No | What a reader sees, e.g. 'The Cherry Orchard'. Leave it out to keep what is there; send an empty string to drop it and let the tag speak. | |
| newTag | No | Rename the tag to this. The label on existing issues is NOT rewritten, so work in the old tag leaves the track — rename only when the issues are being relabelled too. | |
| archived | No | true takes the track off the row above the board WITHOUT undeclaring it — a play that has been staged: its name, icon, place and tag are kept, its issues stay in it (they do not become 'outside every track'), and links to it keep working. false puts it back in the row. Leave it out to keep what is there. Prefer this to remove_track for a track that is finished. | |
| position | No | Where it sits in the row above the board, counting from 1. Leave it out and a new track goes last, an existing one stays where it is. | |
| projectKey | Yes | Project key, e.g. 'TH'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, destructiveHint=true) the description discloses that declaring writes nothing to issues and that existing label-carrying issues join immediately, plus an explicit write-permission requirement. It still does not explain where the declared destructiveness actually lies – the destructive edge cases (newTag orphaning issues, archive semantics) are only in parameter text.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
About 90 words, front-loaded with the verb and upsert rule, then vocabulary, side-effect, and permission notes in a sensible order. Slight redundancy with the tag/name schema descriptions keeps it off a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter mutation with full schema coverage and annotations, the description supplies the missing pieces an agent needs: upsert behavior, the no-issue-writes nuance, and the permission prerequisite. Return behavior and the destructive specifics are left implicit, but no output schema exists to rely on either.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented in detail. The description adds a usable mental model (tag = space-free label, name = reader-facing label, name optional) but restates rather than extends the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Declare a track on a project, or edit the one that already has this tag" states a specific verb, resource, and upsert semantics in one line. An agent can tell this apart from list_tracks and remove_track without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The create-vs-edit condition is stated explicitly, which is the main routing decision, and the closing sentence names the permission precondition. But the description never points at siblings – the strongest guidance ("Prefer this to remove_track for a track that is finished") lives in the archived parameter's schema text, not here.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_wiki_page_readersSet wiki page readersADestructiveInspect
Say whom a wiki page is REQUIRED READING for, and tell them. The three arguments together are the WHOLE list and replace the one before — read it with get_wiki_page_reading first and pass back what should stay. 'users' is usernames or e-mails as 'a,b' (each must be able to read the page); 'members: true' is everybody on the page's project, whoever they are on the day; 'teamRoles' is the project's team roles by name as 'a,b'. Everybody on the list who has not been told about the edition to read gets a notification that opens the page, and one reminder two working days later if they have not marked it. An empty list switches it off; marks already made are kept. With 'askAgain: true' the list is left as it is and everybody who has NOT read the edition is told once more — and on a page with no approved edition, the edition to read becomes the one the page is at now. The project's lead, the company's owner or an admin only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Page id. | |
| users | No | Usernames or e-mails, as 'a,b'. Take them from list_users. | |
| members | No | true for everybody on the page's project. | |
| askAgain | No | true to leave the list alone and ask again everybody who has not read the edition. | |
| teamRoles | No | The project's team roles by name, as 'a,b'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint=true annotation, it discloses the destructive mechanism precisely: the three arguments are the WHOLE list and replace the previous one. It adds notification and one-reminder-in-two-working-days behavior, that marks are preserved when the list is emptied, and the authorization requirement (project lead, company owner or admin). It does not say what the response looks like or whether partial failure is possible, so not a full 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The replacement rule and the get_wiki_page_reading prerequisite are front-loaded, and almost every clause carries information an agent needs. It is dense and somewhat run-on, with a couple of clauses packed together (notification + reminder + askAgain) that could be separated, but there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, permission-gated mutation with no output schema, the description covers the authorization gate, the replacement semantics, the notification/reminder effects, the reversibility caveat (marks kept), and the alternate askAgain path. Nothing an agent needs in order to call it safely is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, yet the description still adds real semantics: 'users' entries must each be able to read the page, 'members: true' is dynamic membership ('whoever they are on the day'), and 'askAgain: true' overrides the list rather than replacing it. The only weak spot is that the id parameter gets nothing beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — setting who a wiki page is required reading for, plus the notification side effect. It is clearly distinguishable from get_wiki_page_reading (read the current list) and mark_wiki_page_read (mark one's own read), both of which appear 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent to read the current list with get_wiki_page_reading first and pass back what should stay, which is the key prerequisite for a full-replacement tool. It also names the alternative mode (askAgain: true) and the switch-off case (empty list).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site_trafficSite trafficARead-onlyInspect
How a project's website was visited, from the service that counts it: Google Search Console (clicks, impressions, ctr, position by query, page, country, device or date), Vercel Web Analytics (visitors and page views by page, referrer, source, country, device or date) or Google Analytics 4 (sessions, active users, page views, engaged sessions and key events by source, channel, landing page, country, device or date). Only connections opened to agents are read. The totals are the site's — rows of a breakdown do not add up to them — and the answer's period and notes say what was actually counted.
| Name | Required | Description | Default |
|---|---|---|---|
| by | No | Break down by: query, page, country, device, date, referrer, source or channel. Omit for totals only. | |
| to | No | Last day, YYYY-MM-DD. Omit for the last day counted. | |
| from | No | First day, YYYY-MM-DD. Omit for a week before 'to'. | |
| page | No | Only pages whose address contains this (Search Console), whose path starts with it (Vercel), or sessions whose landing page contains it (Google Analytics). | |
| site | No | Which site, e.g. 'sc-domain:example.com', a Vercel project or 'properties/123456789'. Omit when only one is open. | |
| limit | No | How many rows, at most 50. Default 10. | |
| query | No | Only searches containing this. Search Console only. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only, non-destructive, open-world profile, and the description adds real value beyond them: it discloses the precondition that only connections opened to agents are readable, and warns that breakdown rows will not sum to the site totals. That totals-vs-rows caveat and the 'period and notes say what was actually counted' sentence give the agent interpretive context it could not get from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with purpose, followed by provider detail and then the interpretive caveat. The provider enumeration is dense but each clause carries distinct information; there is little filler, though the provider list is long enough to slightly dilute the front-loading.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a seven-parameter read-only tool with no output schema, the description covers what metrics are returned, what dimensions are available per provider, the auth prerequisite, and the totals caveat. What it does not state — row ordering, pagination beyond the schema's limit — is either in the schema or minor for a read call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description earns more by mapping which breakdown values work with which provider (e.g. query is Search Console's dimension, channel and landing page belong to Google Analytics 4, referrer and source to Vercel). That cross-provider mapping of the 'by' parameter is not in the schema and prevents invalid combinations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb-and-resource pair (how a project's website was visited, from the counting service) and enumerates the three providers plus their metrics and dimensions, so an agent knows exactly what data comes back. It stops short of naming sibling analytics tools (admin_funnel, admin_landing_week, admin_overview), so differentiation relies on the provider framing rather than explicit contrast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is implied guidance: 'Only connections opened to agents are read' and 'Omit for totals only' tell the agent when breakdowns apply, and the 'site' param says to omit it when only one site is open. But there is no explicit when-to-use or when-not-to-use statement relative to the admin_* analytics siblings, leaving the alternative selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
take_project_presetTake project presetAInspect
Give a project a ready-made setup (see list_project_presets) — only what it does not already have: a column, a type, a recurring issue or a page of the same name is left as it is, so taking it twice adds nothing. The workflow is taken only by a project with no issues whose states are still the ones a new project starts with; otherwise 'workflow' answers 'issues' or 'own' and the project's own workflow stays (the workflow screen offers the same one, and asks where each state's work goes). The recurring issues come SWITCHED OFF, each with the day it would first be filed on: read them with list_issue_schedules and switch on the ones meant with set_issue_schedule. The register also switches legal references on for the project and, where the project told nobody of due days ahead, sets that to 14, 7 and 1 days; 'agents' and 'jira' keep the project's types and workflow; 'season' needs the theatre switched on for the company and sets the production type up for anchor dates. With 'samples', the preset's sample issues and pages are filed as you, all labelled 'sample' so they are found and removed together. Words are in 'language' — 'en' or 'ru'. The project's lead, the company's owner or an admin only.
| Name | Required | Description | Default |
|---|---|---|---|
| preset | No | Which one: 'requirements', 'agents', 'jira' or 'season'. | requirements |
| project | Yes | The project key, e.g. PM. | |
| samples | No | true to file the sample requirements and pages too. Default false. | |
| language | No | The language the names are written in: 'en' (the default) or 'ru'. They are the project's own afterwards and can be renamed. | en |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses idempotence, workflow state constraints, that recurring issues arrive switched off, legal-reference and due-day defaults, preset-specific exceptions for agents/jira/season, sample labelling, language behavior, and the required permission level. These are exactly the mutation-side effects an agent needs before invoking the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and key idempotence rule are front-loaded, and nearly every sentence adds operational detail relevant to correct invocation. The single dense paragraph is information-rich but could be easier to scan; length is justified by the tool's branching behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex mutation tool with no output schema, the description covers permissions, idempotence, preset-specific behavior, side effects, follow-up tools, and sample handling. Nothing essential for correct invocation appears to be missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaningful semantics for several parameters: 'samples' files labelled sample content that can be removed together, 'language' controls naming and can be renamed later, and preset behavior varies materially by value. Some parameter details remain schema-only, so it does not quite reach 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Give a project a ready-made setup,' and immediately points to list_project_presets as the discovery counterpart. It clearly distinguishes applying a preset from listing presets, and the preset-specific effects further confirm what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the core usage condition (apply only what the project does not already have, so taking it twice adds nothing) and explains workflow-specific restrictions. It also points to list_project_presets for discovery and to set_issue_schedule for follow-up, though it does not broadly compare against alternatives like create_project.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
term_graphTerm graphARead-onlyInspect
What a project's terms rest on (PM-1053): its confirmed terms and its parent projects', the links between them, and 'order' — the terms in the order to read them, each after what it rests on, the ones resting on nothing first — with 'circles', terms whose definitions rest on each other (worth putting right). A link is 'dependsOn' (the definition rests on the other term), 'specialCaseOf' or 'oppositeOf'; its 'state' is 'confirmed' or, to a member who may write, 'proposed' — offered because the definition names the other term, waiting for a person (link_terms decides it). The order rests on confirmed links only. With 'term', only what stands within 'depth' links of it — the way to look at a large dictionary. Only terms whose source you may open. Only where the company's plan includes AI.
| Name | Required | Description | Default |
|---|---|---|---|
| term | No | A term — its id, or a spelling of it — to see only what is around it. Leave out for the whole project. | |
| depth | No | How many links away from 'term', 1 to 3. Default 2. | |
| project | Yes | The project key, e.g. MATH. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/non-destructive annotations, it discloses access filtering ('Only terms whose source you may open'), plan gating ('Only where the company's plan includes AI'), and a computation rule ('The order rests on confirmed links only'). It also explains that 'proposed' state is visible only to writers, which is meaningful authorization context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The entire definition is a single tangled run-on paragraph with nested em-dash asides, so the depth/scoping semantics that matter most for invocation are buried mid-sentence. The content is dense but not front-loaded or scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with no output schema, the description covers the shape of the response (terms, typed links with state, order, circles) and the access/plan constraints. It is complete enough to call correctly, with the residual gap being the exact response envelope, which no output schema defines anyway.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents id-or-spelling for 'term' and the 1-3 range for 'depth'. The description adds only the purpose of scoping ('what stands within depth links of it') and the confirmed-links-only rule, which is modest incremental value over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (a project's term dependency graph) and enumerates its parts: confirmed terms plus parent projects', the links, the reading 'order', and 'circles'. It is distinguishable from flat-list siblings like list_terms by the graph/ordering framing, though it never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives real usage context: passing 'term' scopes the result to a neighbourhood, described as 'the way to look at a large dictionary', and it points to link_terms as the tool that decides proposed links. What's missing is an explicit statement of when to prefer this over list_terms or link_terms.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unlink_issuesUnlink issuesADestructiveInspect
Remove a link between two issues: name both ends (and, when more than one link joins them, the phrase — 'blocks', 'relates to'), or give the 'linkId' get_issue returned. Ambiguity is refused rather than guessed: two issues joined twice and no phrase given comes back with the links listed. Requires permission to edit BOTH issues. The issues themselves are untouched.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | The other end, e.g. 'PM-417'. Not needed when 'linkId' is given. | |
| from | No | One end, e.g. 'PM-419'. Not needed when 'linkId' is given. | |
| type | No | Which link, when the two issues are joined by more than one: the phrase as get_issue says it ('blocks', 'is blocked by', 'relates to'). | |
| linkId | No | The link's id, as get_issue returns it in 'links'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint=true annotation, the description discloses that permission to edit both issues is required, that the issues themselves are untouched, and that ambiguous multi-link cases return the links listed rather than guessing. These are meaningful behavioral details for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and then efficiently covers parameter alternatives, ambiguity handling, and permissions. Every sentence contributes useful information with no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation tool with four optional parameters and no output schema, the description covers permissions, valid parameter combinations, ambiguity behavior, and scope of destruction. It is complete enough to invoke correctly, with only minor gaps around post-success behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the parameter descriptions already carry most semantics. The description adds useful clarity about the mutually exclusive alternatives and when the type phrase is needed, though it does not add much beyond the schema's own examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Remove a link between two issues.' This clearly distinguishes it from sibling tools like link_issues and unlink_wiki_page, and 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains the two valid invocation paths: name both issue ends, optionally with a phrase, or provide a linkId from get_issue. It also notes that ambiguity is refused rather than guessed, giving clear operational context, though it does not explicitly contrast use with sibling tools such as link_issues.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unlink_wiki_pageUnlink wiki pageADestructiveInspect
Remove the link between an issue and a wiki page. Identify the page by 'pageId', or by 'spaceKey' + 'title'. Requires permission to edit the issue. The page itself is not touched.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Exact page title, when identifying the page by title. | |
| pageId | No | Page id (as returned by search_wiki). | |
| issueKey | Yes | Issue key, e.g. 'UK-1'. | |
| spaceKey | No | Space key, when identifying the page by title. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the description's key contribution is scoping that destructiveness: "The page itself is not touched" clarifies that only the association is removed, which meaningfully corrects an agent's likely over-reading of destructiveHint. It still doesn't say whether the call is idempotent or what happens if no link is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action, then identification, then the permission prerequisite, then the scope caveat. No filler or restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple destructive unlink with full schema coverage and no output schema, the description covers what it does, how to identify the target, the permission requirement, and the blast radius. Nothing an agent needs in order to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline would be 3, but the description adds real meaning the schema does not: the two mutually exclusive identification paths (pageId alone, or spaceKey + title together). That is the one semantic subtlety the per-property descriptions cannot express on their own.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Remove the link between an issue and a wiki page" names a specific verb (remove link) and both resources, and is the clear inverse of the sibling link_wiki_page. An agent can distinguish it from delete_wiki_page or update_wiki_page without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives the operational context needed to call it: the page can be resolved by pageId or by spaceKey + title, and the caller must have edit permission on the issue. It stops short of explicitly naming link_wiki_page as the counterpart operation or saying what to do when no link exists, so not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unmerge_personUnmerge personADestructiveInspect
Undo merge_persons: the person merged is a person of their own again, with every spelling and fact they had. Name them by their own id — 'merged' in list_persons lists them under the person they were merged into. Ask the person first. Both journals keep a line. Members of the project who may write only. Only where the company's plan includes AI.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The person merged into another, as 'merged' lists them. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the description adds real value by disclosing the audit side effect ('both journals keep a line'), the authorization requirement (project members who may write only), and a plan-level availability gate. It does not cover failure modes or what happens when the two merged records have conflicting facts, which keeps it at 4 rather than 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action in the first clause, and nearly every sentence carries operational information. The trailing constraints are written as telegraphic fragments ('Members of the project who may write only. Only where the company's plan includes AI.'), which saves space but costs a little readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter destructive mutation with no output schema, the description covers purpose, inversion target, id sourcing, consent, permissions, plan gating, and audit effects — enough to call it correctly. It omits error/edge-case behavior and any hint of the response, which is acceptable given no output schema exists but leaves a small gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter is documented, so the baseline is 3. The description still earns credit by disambiguating which id to pass — the merged person's own id, not the surviving person's — and by pointing at list_persons as the way to find it, which prevents a plausible misuse.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb-plus-resource framed as the inverse of a named sibling ('Undo merge_persons'), and clarifies the resulting state: the person becomes their own again with all spellings and facts. An agent can distinguish this from merge_persons, decide_persons, and delete_person without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear preconditions: identify the person by their own id (as 'merged' appears in list_persons), ask the person first, the caller must be a project member with write access, and the company plan must include AI. It stops short of naming alternatives explicitly (e.g., delete_person or decide_persons when unmerging is not the intent), so it falls just below the top score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_commentUpdate commentADestructiveInspect
Edit a comment on an issue: pass 'body' to replace the whole of it, or 'edits' to change part of it — exact find-and-replace against the comment as get_comments hands it back, each 'oldText' occurring exactly once. One body axis per call. With 'edits' the answer says where each one landed rather than giving the comment back, so correcting one number in a long comment costs neither a resend nor a re-read. Nothing here takes a version and none is needed: an 'oldText' is matched against the comment as it stands now, so an edit whose text somebody has since rewritten is refused rather than applied over their words. The author may edit their own comment; anyone with full write access in the project may edit any. Answers with 'notified' — and note that this is only the people the edit newly reaches: names already present in the old text are not notified again, and the comment is not re-announced to watchers.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Issue key the comment is on, e.g. 'UK-1'. | |
| body | No | The new body, replacing the old one entirely. Markdown is kept as written, and carries $…$ / $$…$$ LaTeX formulas and [~username] mentions. | |
| edits | No | Exact replacements in the comment, changing part of it in place. Matched against the body as get_comments returns it — stored as written, so what you read is what an 'oldText' has to equal, whitespace and line breaks included. Every edit is looked for in that text, not in what the edits before it produced; if any one does not fit, none is applied. | |
| commentId | Yes | The comment's id, as returned by get_comments or add_comment. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While annotations already flag destructiveHint=true, the description adds what annotations cannot: there is no version parameter and none is needed because matching is against current text, a stale oldText is refused rather than applied, batch edits are all-or-nothing, and notification is limited to newly reached names without re-announcing to watchers. That is substantial behavioral context beyond the structured hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded correctly: purpose and mode choice come first, then matching semantics, then permissions, then return shape. A few flourishes ('costs neither a resend nor a re-read') and some restatement of the schema's exact-match rule could be cut without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates by describing both return shapes: 'edits' returns landing positions instead of the comment, and the response carries 'notified'. Combined with the authorization and concurrency notes, an agent has everything needed to call this correctly and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description still adds meaning by stating the body/edits exclusivity, that oldText is matched against the Markdown source as get_comments returns it (whitespace and line breaks included), and that each edit is evaluated against the original text rather than the output of prior edits. Most of the per-field detail is redundant with the schema, which caps this at 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opening clause names a specific verb and resource ('Edit a comment on an issue') and immediately scopes it to issue comments, which separates it from update_wiki_comment and from add_comment. The two operating modes are named in the same sentence, so an agent knows exactly what the tool does before reading further.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit mode-selection rule ('pass body to replace the whole of it, or edits to change part of it... One body axis per call'), plus an authorization rule for who may call it. It also references get_comments as the source of the text edits are matched against, giving the agent the full call pattern rather than just the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_credentialUpdate credentialADestructiveInspect
Change a credential, by the id from list_credentials: its name, its value, or who may read it — each on its own, and only what you pass is touched, so taking somebody off the list never needs the value. 'readers' REPLACES the list; noReaders: true empties it. Only the person who attached it and the project's lead may change one: being shown a secret is not being given it to pass on. The answer never carries the value. Do not repeat the value in any text you write — a comment, a description, a merge request, a log.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Credential id, from list_credentials. | |
| name | No | A new name. Leave it out to keep the name. | |
| value | No | A new value. Leave it out to keep the value. | |
| readers | No | Who else may read it from now on, comma-separated usernames or emails. Replaces the whole list. Leave it out to keep the list. | |
| noReaders | No | True to leave nobody on the list — the author and the project's lead still read it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: names the authorization rule (only the attacher and the project lead may change one), discloses that the response never carries the value, and explains the security posture behind it ('being shown a secret is not being given it to pass on'). It also adds an operational constraint about never repeating the value in comments/logs/MRs, which is exactly the kind of context annotations can't express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the verb and the affected fields, then the update semantics, then permissions, then the no-leak rule — a sensible order with no filler sentences. Minor redundancy in re-explaining the 'readers' REPLACES / noReaders empties behavior that the schema already covers, and the closing sentence is long though substantive.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description covers the return value anyway ('The answer never carries the value'), along with auth requirements, partial-update behavior, and handling of the sensitive payload. For a destructive mutation tool this leaves an agent with nothing essential missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already states that omitted fields are kept, that 'readers' replaces the whole list, and what 'noReaders' does. The description restates those facts (with emphasis) but adds little syntax or format detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ('Change a credential, by the id from list_credentials') and enumerates exactly which attributes can change: name, value, readers. That makes it trivially distinguishable from create_credential, delete_credential, and reveal_credential in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the id source (list_credentials) and the partial-update rule ('only what you pass is touched'), plus the practical consequence that removing a reader never requires re-supplying the secret. It does not explicitly say when to prefer reveal_credential or delete_credential instead, so routing to siblings is implicit rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_issueUpdate issueADestructiveInspect
Update an issue: any of summary, description, type, assignee, priority, labels, dueDate, parentKey, fixVersions, or status (which performs the transition, and fires the project's rules — a rule may append a checklist to the description, in which case 'description' is listed in 'changed'). Only the fields you pass are changed. A project's workflow may put conditions on a move — that only certain people may make it, or that it must set certain fields — and a refusal names the condition and, where it is about who you are, lists the states you CAN reach. Fields a move requires must be sent in this same call, with 'resolution' and 'fields': a value set by an earlier call does not satisfy the condition. Answers with 'notified' (who this actually reaches: the people mentioned, and for an assignment the new assignee as 'assignee' and the one taken off as 'unassigned' in 'as' — never yourself) and 'unresolvedMentions' (what looked like a mention and reached nobody, each with a reason) — a wrong handle is stored as written and never refused, so that list is the only sign it did not land.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Issue key, e.g. 'UK-1'. | |
| type | No | New issue type name, e.g. 'Task', 'Bug', 'Story', 'Epic'. | |
| fields | No | The project's own columns to fill in with this update, by their NAMES: 'Segment=AI; Country=Poland', or a JSON object. Same shape as set_issue_fields — this exists here because a move a workflow conditions on a column has to set it in the same call. | |
| labels | No | Labels to set, space or comma separated. Replaces the existing set. | |
| status | No | Status name to move the issue to, e.g. 'In Progress', 'Done'. | |
| dueDate | No | The day this is due, as YYYY-MM-DD. A calendar day, not a timestamp. Pass an empty string to clear it. | |
| summary | No | New summary (title). | |
| assignee | No | Assignee username or email. Pass an empty string to unassign. 'agent:<role>' (e.g. 'agent:product') hands the issue to that agent instead: you become the assignee and the agent works on your behalf — allowed only where a switched-on duty of that role in this project takes issues like this one (list_project_rules shows the duties). | |
| priority | No | Priority name, e.g. 'High'. | |
| parentKey | No | Key of the issue this one hangs off, e.g. 'PM-276' — moves it under that story or epic. To DETACH it instead, send detachParent: true; an empty string still works but is easy to lose on the way. Nothing is renamed and the key never changes: an issue keeps the key of the project it lives in. A sub-task must stay in its parent's project; anything else may cross projects. | |
| resolution | No | Resolution name to set, e.g. 'Fixed', 'Won't Do'. Some workflows require one on the move into a finished state; sending it here is how that condition is met. | |
| description | No | New description. Markdown, with $…$ / $$…$$ LaTeX formulas and [~username] mentions. | |
| fixVersions | No | The versions of the project this goes out in, by name, comma-separated: '2.4.0, 2.4.1'. REPLACES the set — to add one, send the ones it has (get_issue's 'fixVersions') with the new one. Pass an empty string to take it out of every version. A name the project does not have refuses the update and lists the ones it has. | |
| detachParent | No | Take this issue out from under its parent and leave it top-level. The reliable way to detach: unlike an empty parentKey it cannot arrive as the two characters "" or be dropped as «nothing was sent». Refused together with a parentKey, since the two would be asking for opposite things. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With only generic annotations (destructiveHint=true), the description carries real behavioral weight: it explains that a status change fires project rules, may append a checklist and marks 'description' as changed; that refusals name the failing condition and list reachable states; and that a wrong handle is stored silently rather than rejected. That is exactly the kind of consequence disclosure the annotations cannot provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with the field list and every sentence carries substantive information, including return-value semantics for a tool with no output schema. However, the nested em-dash parentheticals (the status/rule clause, the notified clause) make it dense and force a second read.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter mutation with no output schema, the description covers the missing pieces: partial-update semantics, workflow preconditions and refusal shape, and the 'notified'/'unresolvedMentions' response fields. An agent has enough to call this correctly and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so a 3 would be the floor; the description earns more by adding meaning the schema lacks, e.g. that status triggers the transition machinery and rules, that fixVersions replaces rather than appends, and that detachParent is the reliable alternative to an empty parentKey. It stops short of 5 only because most per-field syntax details are already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource and enumerates every updatable field, so an agent knows exactly what the tool mutates. It even clarifies that 'status' performs a transition. It falls short of a 5 because it never contrasts itself with the sibling move_issue or set_issue_fields (it only notes the 'fields' parameter shares their shape), leaving the boundary blurred.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states a clear partial-update contract ('Only the fields you pass are changed') and spells out the condition for combining parameters: workflow-required fields must be sent in the same call as the move, with resolution and fields. What is missing is explicit routing versus alternatives such as move_issue when the intent is purely to relocate an issue.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_project_ruleUpdate project ruleADestructiveInspect
Change a project rule, by its id from list_project_rules. Only what you pass changes: pass just 'enabled' to switch a rule on or off, or any of the others to edit it. An empty string for 'type' or 'label' removes that condition; an empty 'fromStatus' or 'branch' removes that one too; for a duty, an empty 'status', 'agentActions', 'agentFields' or 'doneStatus' clears that one. A rule's action cannot change. A rule appends its checklist to an issue's description when the issue ENTERS the rule's state — from the board, the Jira API or update_issue alike. The block starts with a hidden marker line '[//]: # (pm-rule:)'; while that line is in the description, entering the state again adds nothing (the journal says 'alreadyThere'). A [~username] in the template is a mention: that person is notified when the checklist lands. A checklist that would make the description too long is not added and the journal says 'tooLong'; the move itself still happens. 'trigger' says WHEN: 'entered' (the default — the issue entered 'status'), 'versionReleased' (a version it goes out in was marked released), 'subtasksDone' (every issue under it is finished — the rule acts on the PARENT) or 'subtaskStarted' (an issue under it was taken into work — the parent again); or what the project's repository said through its webhook: 'branchCreated' (a branch naming the issue was made), 'mrOpened', 'mrMerged' or 'mrClosed' (a merge request — a pull request on GitHub — naming the issue was opened, merged, or closed without merging). An issue is named by its key in the branch, the title or the description, and only this project's issues are touched. 'branch' narrows the three merge-request events to a request going INTO that branch, e.g. 'main'. Nobody is behind a webhook, so such a rule acts as whoever last saved or switched it on, whatever its action. 'deployed' fires when a pipeline reports that the issue went out to an environment (report_deployment); 'environment' narrows it to one of the project's environments by name, e.g. 'staging'. 'actChanged' fires on the issues that cite a legal act when its publisher's text changed, and 'actTouched' only on those where the change is in the place they cite (or that cite the act as a whole) — found once a week, only in a project with the «Legal acts» add-on; 'claimBasisChanged' fires on the issues that cite a claim ([thm:…], [claim:…]) whose legal basis is such an act, once per new text and claim; nobody is behind a publisher either, so these act as the rule's owner too. Only 'entered' has a 'status'; pass an empty one for the others. 'fromStatus' narrows any of them to an issue coming from that state: the state it has just left for 'entered', the state it stands in for the rest. A rule with action 'move' MOVES the issue to 'moveToStatus' instead of appending anything, and has no template (pass an empty one). The move is an ordinary one — made as whoever last saved or switched on the rule, asked of the project's workflow, written to the history with the rule's name, and followed by the rules of the state it lands in. A workflow that refuses it leaves a 'moveRefused' line with the reason in the journal and nothing else; 'moved' is a move made; 'tooDeep' is a move not made because rules had already moved issues three times off one event. A rule with action 'agent' is a DUTY instead: it says which issues may be handed to an agent role (agentRole, e.g. 'product') and what the agent may do with them. Its 'template' is then the INSTRUCTION — what doing such an issue means in this project — and nothing is appended anywhere. A duty may have no state (pass an empty 'status'): then an issue is handed only by a person. agentActions is a list from: describe, subtasks, ask, wiki, report, support, jira (propose a move or a comment in the project's linked Jira, applied by a person). agentFields names the fields it may set: priority, labels, duedate, or the project's own fields by name. doneStatus is the state it moves the issue to when done — never a finished one. capUsd raises what one task may cost, up to 5 dollars. Commenting is always allowed; finishing, deleting, reassigning and anything outside the issue never are. Saving or switching on a duty makes it yours: it runs on your behalf and access, and is switched off if you lose the project. Project lead or admin only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The rule's id, from list_project_rules. | |
| name | No | A new name. | |
| type | No | Only issues of this type, by name. An empty string means any type. | |
| label | No | Only issues with this label. An empty string means any label. | |
| branch | No | For a merge-request event: only a request going into this branch. An empty string means into any. | |
| capUsd | No | For a duty: what one task may cost, in dollars, at most 5; 0 goes back to the ordinary ceiling. | |
| status | No | A new state to fire on, by name. | |
| enabled | No | true to switch the rule on, false to switch it off. | |
| trigger | No | WHEN the rule fires: 'entered', 'versionReleased', 'subtasksDone', 'subtaskStarted', 'branchCreated', 'mrOpened', 'mrMerged', 'mrClosed', 'deployed', 'actChanged', 'actTouched' or 'claimBasisChanged'. Moving off 'entered' drops the rule's state. | |
| template | No | A new checklist template (Markdown). Replaces the old one for issues that enter the state from now on; checklists already added stay as they are. | |
| agentRole | No | For a duty: a new agent role key. | |
| doneStatus | No | For a duty: a new review state; an empty string and it no longer moves the issue. | |
| fromStatus | No | Only an issue coming from this state, by name. An empty string means from any. | |
| projectKey | Yes | Project key, e.g. 'ONB'. | |
| agentFields | No | For a duty: the whole new list of fields, comma-separated. | |
| environment | No | For 'deployed': only a deployment to this environment, by name. An empty string means to any. | |
| agentActions | No | For a duty: the whole new list of actions, comma-separated. | |
| moveToStatus | No | For a 'move' rule: a new state to move the issue to, by name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond the destructiveHint annotation: it explains empty-string clearing, immutable action, checklist marker behavior, duplicate suppression, journal outcomes such as 'alreadyThere', 'tooLong', 'moveRefused' and 'tooDeep', webhook ownership, duty ownership, and the 'Project lead or admin only' permission requirement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a very long, dense paragraph with semicolon-separated clauses and many edge-case details. It is front-loaded with purpose, but it is not concise and would be much easier to scan as structured bullets or sections.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 18-parameter destructive update tool, the description is remarkably complete: it covers partial updates, clearing semantics, trigger behavior, duty semantics, side effects, permissions, and journal outcomes. Nothing essential for correct invocation appears to be missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, but the description adds cross-parameter meaning: empty strings remove conditions, 'enabled' toggles a rule, 'type' and 'label' clearing works differently from omission, and 'trigger' values are tied to specific rule behaviors. It adds real value beyond the schema, though not every parameter gets equal semantic depth.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Change a project rule, by its id from list_project_rules.' It distinguishes update from create/delete/list siblings by requiring an id sourced from list_project_rules.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: the rule must be identified by an id from list_project_rules, and 'Only what you pass changes' explains partial-update semantics. It does not explicitly mention when to use create_project_rule or delete_project_rule instead, so it stops short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_registry_embedUpdate registry embedADestructiveInspect
Change a term's, a claim's or a set's link on other sites (PM-1168) — the sites that may show it, its term — keeping the link, so the sites that have it keep working; for a set also its name, and its 'terms' or 'claims', each given replacing that part of the list (a term on it you may not open stays on it). Only what you pass changes: an empty 'sites' allows any site, days 0 removes the term. Only for somebody who may write in the project; a line in its history.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | A new term in days from now; 0 is until it is removed. | |
| sites | No | Sites that may show it, comma-separated; empty is any site. | |
| terms | No | A set's terms, comma-separated, replacing its terms. | |
| title | No | A set's new name. | |
| claims | No | A set's claims, comma-separated, replacing its claims. | |
| embedId | Yes | The embed's id, from list_registry_embeds or a create_*_embed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and non-read-only, so the safety profile is covered; the description adds real context beyond that: a history line is recorded, write permission in the project is required, unspecified fields are left untouched, and an existing term that the caller cannot open survives the replacement. That last detail is a non-obvious side effect no annotation could convey. It stops short of describing failure modes for a bad embedId, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single run-on sentence stitched together with em dashes and parentheticals, so key rules (empty sites, days 0, permission requirement) are buried mid-stream rather than separated out. Purpose is front-loaded, and nothing is strictly wasted, but the packing hurts scannability for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter destructive mutation with no output schema, the description covers what changes, what is preserved, who may call it, and the audit trail. Absent is any note on behavior when embedId is unknown or when set-only fields (title, terms, claims) are passed for a term or claim embed -- a realistic misuse case worth one sentence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description earns one step above it by explaining replacement semantics that the schema does not spell out: terms and claims are given as a list that replaces that part of the list, and entries the caller cannot open are retained. The 'empty sites / days 0' notes duplicate the schema descriptions rather than adding to them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource -- changing a term's, claim's or set's link on other sites (i.e., the registry embed) -- and enumerates the mutable parts (sites, days, set name, terms, claims). It is distinguishable from create_*_embed and delete_registry_embed by implication, though no sibling is named explicitly. The dense phrasing slows parsing but the purpose itself is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives the key precondition ("Only for somebody who may write in the project") and the partial-update rule ("Only what you pass changes"), which is genuinely useful invocation guidance. However, it never names alternatives -- delete_registry_embed, create_term_embed/create_claim_embed/create_embed_set, or update_wiki_embed -- nor says when to prefer them, 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.
update_versionUpdate versionADestructiveInspect
Change a version: its name, description, days, or whether it is archived. Only what you pass is changed. A version is what a project's work goes out in — '2.4.0', 'Autumn'. It is the project's own: an issue carries versions of its own project only, any number of them ('fixVersions' on create_issue, update_issue and get_issue; JQL 'fixVersion = "2.4.0"', 'fixVersion in unreleasedVersions()'). An issue that carries the version goes on carrying it under a new name. Archiving puts it away — still on its issues, no longer offered for new ones — and is undone the same way. Releasing is release_version's, not this tool's. Answers with the version as list_versions gives it. Project lead or admin only.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | A new name. | |
| version | Yes | The version, by its name or its id from list_versions. | |
| archived | No | true puts it away; false brings it back. | |
| startDate | No | The day work on it starts, as YYYY-MM-DD. An empty string clears it. | |
| projectKey | Yes | Project key, e.g. 'ONB'. | |
| description | No | A new description. An empty string removes it. | |
| releaseDate | No | The day it is meant to ship, as YYYY-MM-DD. An empty string clears it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses key behavior: partial updates ('Only what you pass is changed'), permission requirements, rename behavior ('An issue that carries the version goes on carrying it under a new name'), archive semantics including reversibility, and the return shape matching list_versions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and appropriately detailed for a mutation tool with seven parameters. Some explanatory material, such as the fixVersions and JQL examples, is useful domain context but slightly more than strictly needed to invoke the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given seven parameters, no output schema, and annotations present, the description covers the essential operational context: mutation scope, permissions, archiving, renaming behavior, return shape, and the alternative release_version tool. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents each parameter well. The description adds important update semantics ('Only what you pass is changed') and explains archiving, but its phrase 'days' is less precise than the schema's separate startDate and releaseDate fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Change a version'. It enumerates the mutable fields (name, description, dates, archived) and explicitly distinguishes this tool from release_version, so an agent can identify its purpose without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states when to use this tool and when not to: 'Releasing is release_version's, not this tool's.' It also gives the precondition 'Project lead or admin only' and explains that only supplied fields change, which directly guides invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_wiki_commentUpdate wiki commentADestructiveInspect
Edit a comment on a wiki page — your own, or anyone's with full write access in that project. Read it first with get_wiki_page(withMarkdown: true), which gives each comment its 'markdown' and 'version'. Pass 'markdown' to replace the whole comment, or 'edits' to change part of it (exact find-and-replace on that Markdown, each 'oldText' occurring exactly once) — the answer then says where each landed, not the comment. An inline comment's anchor moves with 'inlineSelection': the page text it should point at, copied exactly; an empty string turns it into an ordinary footer comment, which is the only way it ever stops being anchored. Mention someone as @Their Name, the wiki's own form. Answers with 'notified' — only the people the edit newly reaches, since names already in the old text are not notified again and the page is not re-announced to its watchers.
| Name | Required | Description | Default |
|---|---|---|---|
| edits | No | Exact replacements in the comment's Markdown — the text get_wiki_page returns as a comment's 'markdown'. Every 'oldText' is matched against it as you read it (not against the result of the other edits) and must occur exactly once unless 'replaceAll' is set; if any edit does not fit, none is applied. | |
| markdown | No | The whole comment, replacing what is there. Markdown, which also carries $…$ / $$…$$ LaTeX formulas. | |
| commentId | Yes | The comment's id, as get_wiki_page lists it or add_wiki_comment returned. | |
| inlineMatch | No | Which occurrence of 'inlineSelection' on the page to anchor to, counted from 1. Only needed when the text occurs more than once. | |
| expectedVersion | No | The version you read (from get_wiki_page). If the comment has moved on since, the edit is refused instead of overwriting somebody else's. | |
| inlineSelection | No | Move the inline anchor: the page text this comment should point at, copied exactly from the page. An empty string detaches it, making it a footer comment. Refused when the page does not carry that text, or carries it more than once and 'inlineMatch' does not say which — never resolved by guessing. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is known. The description adds real behavior beyond that: notification semantics ('only the people the *edit* newly reaches', watchers not re-announced) and the fact that partial edits return landing positions rather than the comment. It does not restate atomicity or version-refusal, which live in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: the read-first guidance and the two editing modes come before the edge-case details. The em-dash parentheticals make it a single long paragraph, which slightly hurts scannability, but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so: partial edits report where each landed, and the response includes 'notified'. For a 6-parameter destructive mutation, the guidance on versioning, anchoring, and atomic failure is sufficient to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description still adds value by explaining the mutual-exclusion trade-off between 'markdown' and 'edits', that oldText is matched against the original comment text rather than the result of prior edits, and that an empty inlineSelection converts the comment to a footer comment.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Edit a comment on a wiki page') and immediately scopes permissions ('your own, or anyone's with full write access'). It is clearly distinguishable from add_wiki_comment, delete_* siblings, and get_comments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tells the agent to read first with get_wiki_page(withMarkdown: true) to obtain 'markdown' and 'version', then routes between the two editing modes: 'markdown' for full replacement, 'edits' for partial find-and-replace. The inlineSelection empty-string detach case is explicitly framed as the only way to unanchor.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_wiki_embedUpdate wiki embedADestructiveInspect
Change an embed of a wiki page's scene (PM-1076) — its caption, the sites that may frame it, its term — keeping its link, so the sites that have it keep working. Only what you pass changes: an empty caption takes it off, an empty 'sites' allows any site, days 0 removes the term. Only for somebody who may edit the page; a line in its history.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | A new term in days from now; 0 is until it is removed. | |
| sites | No | Sites that may frame it, comma-separated; empty is any site. | |
| caption | No | New caption; empty takes it off. | |
| embedId | Yes | The embed's id, from list_wiki_embeds or create_wiki_embed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and readOnlyHint=false, so the safety profile is covered; the description adds the permission requirement, the audit-history line, and the important 'only what you pass changes' partial-update contract. Some of the empty-value semantics overlap with the schema, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences, front-loaded with the verb and resource, and every clause conveys a rule the agent needs. Mild redundancy with the schema on empty caption/sites/days keeps it from top marks.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no output schema, the description covers the partial-update contract, permission gating, audit behavior, and the empty-value edge cases an agent would otherwise get wrong. Nothing essential to calling it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents embedId, caption, sites and days, including the empty-value behavior. The description restates those same empty-value rules rather than adding new syntax or format detail, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Change an embed of a wiki page's scene') and enumerates the mutable attributes (caption, sites, term). It implicitly separates itself from create/delete siblings by stressing that the link is kept so framing sites keep working, though it never names those siblings outright.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear precondition ('Only for somebody who may edit the page') and a side-effect note ('a line in its history'), which helps an agent decide whether this is the right call. It stops short of explicitly pointing to create_wiki_embed/delete_wiki_embed as alternatives for the cases this tool doesn't cover.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_wiki_pageUpdate wiki pageADestructiveInspect
Edit a wiki page: retitle it, change its body, move it under another parent (or to the top of its space), or set its labels. Identify it by 'id', or by 'spaceKey' + 'title'. To change part of the body, pass 'edits' (exact find-and-replace on the Markdown source, each 'oldText' occurring exactly once) or 'replaceSection' — the answer says where each landed, not the page, so a one-line fix to a long page costs one line. 'markdown' replaces the whole body — read it first with get_wiki_page(withMarkdown: true) and edit that, or the page's links, images and macros are dropped; 'appendMarkdown' adds to the end and leaves what is there untouched. Mention someone as @Their Name, the wiki's own form. Requires permission to edit the page. A page with ```anim blocks answers 'anims': per block, whether it plays or every problem with where it stands. Answers with 'notified' (who this actually reaches) and 'unresolvedMentions' (what looked like a mention and reached nobody, each with a reason) — a wrong handle is stored as written and never refused, so that list is the only sign it did not land.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Page id (as returned by search_wiki). | |
| edits | No | Exact replacements in the page's Markdown source — the text get_wiki_page returns with 'section', 'offset' or withMarkdown: true. Every 'oldText' is matched against the page as you read it (not against the result of the other edits) and must occur exactly once unless 'replaceAll' is set; if any edit does not fit, none is applied. Pair with 'expectedVersion'. | |
| title | No | Current page title, when identifying the page by title. | |
| labels | No | Labels to set, space or comma separated. Replaces the existing set. Stored in lower case, except a label starting with '$', which is kept exactly as written; list_wiki_labels shows the ones the space already uses. | |
| message | No | Short note for the page history, e.g. why you changed it. | |
| markdown | No | The complete new body as Markdown — replaces what is there. Carries $…$ / $$…$$ LaTeX formulas and the wiki's macros on a line of their own ({toc}, {children}, {info} … {info}, {expand:title=…} … {expand}). A theorem, lemma, proposition, corollary, conjecture or question is a block of its own — ::: theorem {#thm:label status=computer number=5.8 title="…"} on its line, the statement, then ::: — read into the project's register of claims at the save (list_claims); 'claims' in the answer says which. | |
| newTitle | No | New title. The page's existing links follow the rename. | |
| parentId | No | Move the page under this parent page id. | |
| spaceKey | No | Space key, when identifying the page by title. | |
| minorEdit | No | Mark this as a minor edit in the history. | |
| toTopLevel | No | Move the page to the top of its space, out from under any parent, so it sits beside the space's other root pages. Use this instead of parentId/parentTitle — a tool argument has no way to say 'no parent' by leaving one out. | |
| parentTitle | No | Move the page under the page with this title, in the same space. | |
| appendMarkdown | No | Markdown to add to the end of the page, leaving the rest as it is. Same syntax as 'markdown'. | |
| replaceSection | No | Replace one whole section: 'section' names it as get_wiki_page's 'section' does (anchor or heading text), 'markdown' is what replaces it — heading line included, as reading the section returned it. Can be combined with 'edits' elsewhere on the page. | |
| expectedVersion | No | The version you read (from get_wiki_page). If the page has moved on since, the edit is refused instead of overwriting someone else's. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark this as destructive, and the description substantiates why: whole-body replacement drops links, images, and macros unless read first, labels replace the existing set, and wrong mention handles are stored without refusal. It also notes the edit permission requirement and the atomic 'all or none' behavior of find-and-replace edits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense because the tool is complex, but it is front-loaded with the core purpose and then proceeds through identification, body-edit modes, mention handling, permissions, and return quirks. Every sentence contributes operational value, and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 15-parameter destructive tool with no output schema, the description covers the missing output context sufficiently: it mentions 'notified', 'unresolvedMentions', 'anims', and 'claims' where relevant. It also fills the behavioral gaps that annotations alone do not cover, such as permission requirements and link-breaking replacement risk.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is already 100%, the description adds meaningful semantics beyond the schema: exact-match oldText behavior, per-edit landing feedback, the mention syntax, and the distinction between full-body and append modes. It also explains that 'replaceSection' and 'edits' can be combined elsewhere on the page.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Edit a wiki page,' then enumerates the exact operations: retitle, change body, move, and set labels. It also names the two identification modes, so an agent can distinguish this from read-only or creation tools without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly routes body edits among 'edits', 'replaceSection', 'markdown', and 'appendMarkdown', including the critical warning to read the page first with get_wiki_page(withMarkdown: true) before replacing the whole body. That is clear when-to-use and alternative-selection guidance rather than implied context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upsert_mcp_connectionCreate or update MCP connectionADestructiveInspect
Admin only: create or update a project's external MCP connection. Pass 'id' to update an existing one (omit to create). 'token' is stored server-side and never returned; omit it to keep the current token when updating. The assistant panel calls the server's read-only tools (readOnlyHint) directly and turns every other non-destructive tool into a card the person applies; 'forAgents' also gives the project's agents its read-only tools.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Existing connection id to update; omit to create a new one. | |
| url | No | MCP server URL — use https (required when creating). | |
| name | No | Connection display name (required when creating). | |
| token | No | Bearer auth token. Omit to keep the current token when updating. | |
| enabled | No | Whether the connection is enabled. | |
| forAgents | No | Whether the project's agents (called by a mention, a reply or a duty) also get this server's read-only tools. Off by default. | |
| projectKey | Yes | Project key, e.g. 'UK'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so mutation safety is covered structurally. The description adds genuinely non-obvious behavior: the token is stored server-side and never returned, omitting it preserves the current token, and a connection's tools feed the assistant panel and optionally project agents. It omits what an update can destroy or overwrite, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences with the critical admin scope and id rule front-loaded. The closing sentence on assistant-panel behavior is longer than strictly needed but ties directly to the forAgents parameter rather than wandering.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-param mutation with no output schema but full schema descriptions and annotations, the description covers create/update branching, secret handling, and the controlled side effects on agents. Nothing an agent needs before calling is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description nonetheless adds semantics beyond the schema: token secrecy and preservation-on-omit, and a substantive explanation of what forAgents actually grants, which the schema text only gestures at.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair (create/update) and resource (project's external MCP connection), plus an admin-only scope qualifier. The upsert nature is disambiguated by the id rule, so an agent knows exactly what the tool targets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit create-vs-update selection logic ('Pass id to update; omit to create') and token-omission behavior. It doesn't name alternatives such as list_mcp_connections for discovery, but the core invocation conditions are stated plainly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
withdraw_issue_questionWithdraw issue questionADestructiveInspect
Take back a question you asked, when it no longer needs answering — you worked it out, or the task moved on. The comment stays in the thread (the conversation happened) and the question stops counting on the other person's list. The person who asked, or anybody with full write access in the project.
| Name | Required | Description | Default |
|---|---|---|---|
| questionId | Yes | The question's id, as returned by list_issue_questions or ask_issue_question. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already mark this as destructive, but the description adds important nuance: the comment remains in the thread while the question stops counting on the recipient's list. It also states who is authorized to perform the withdrawal, going well beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and condition, then efficiently explains the retained comment and access rule. Every sentence contributes useful selection or invocation context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter mutation tool with no output schema, the description covers purpose, usage condition, behavioral effect, and authorization. Nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the single parameter is fully documented in the schema as the question id returned by list_issue_questions or ask_issue_question. The description adds no further parameter-level meaning, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: taking back an issue question. It also clarifies the effect relative to sibling actions like asking or answering, so an agent can distinguish withdrawal from responding.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly states when to use the tool: when the question no longer needs answering because it was worked out or the task moved on. It does not explicitly name alternative tools, but the condition is strong enough to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
withdraw_wiki_page_approvalWithdraw wiki page approvalADestructiveInspect
Take an approval of a wiki page back: your own, or — the project's lead — somebody else's ('who'). Without 'version' it is the newest edition that person's approval stands on. Nothing is deleted: a 'withdrawn' line is added to the page's journal after the approval it answers, with your note. If nobody else's approval stands on that edition, an older approved edition is in force again, or none.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Page id. | |
| who | No | Whose approval, by username or e-mail. Leave out for your own. | |
| note | No | Why — kept with the line. | |
| version | No | The edition whose approval is taken back. Leave out for the newest approved one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond destructiveHint=true and readOnlyHint=false: it discloses that nothing is deleted, that a 'withdrawn' journal line is appended after the approval it answers with the supplied note, and that the effect cascades — an older approved edition comes back into force if no other approval stands on that edition, or none does. That is exactly the side-effect disclosure a mutation tool needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very short and front-loaded — the action and actor scope come first, then the defaulting rule, then the side effect. Some clauses are compressed to the point of being slightly cryptic ('or none'), but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter mutation with no output schema, the description covers authorization, default resolution, side effects, and reversibility consequences of the state change. An agent has everything needed to call it correctly and to explain the result — nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description genuinely extends it: 'who' is framed as whose approval stands, 'version' is not just an edition id but the edition that person's approval currently rests on, and 'note' is tied to the journal line it accompanies. The cascade rule in particular is semantics the schema does not carry.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Take an approval ... back') and resource (wiki page approval), and immediately scopes the two modes: your own approval, or someone else's if you are the project's lead. That is clearly distinguishable from approve_wiki_page, ask_wiki_page_approval and get_wiki_page_approval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives the condition that selects the 'who' mode (project lead acting on somebody else's approval) and the default resolution rule when 'version' is omitted. What it lacks is an explicit pointer to the sibling to use instead when you want to grant rather than retract an approval, so it is clear context without full routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Added
admin_set_workspace_ours
3 tool updates
- Added
get_chat_agent_policy - Added
set_chat_agent - Added
set_chat_agent_policy
1 tool update
- Added
list_pages_to_approve
2 tool updates
- Added
get_chat_keeping - Added
set_chat_keeping
8 tool updates
- Added
create_chat - Added
delete_chat_message - Added
edit_chat_message - Added
get_chat_messages - Added
list_chats - Added
mark_chat_read - Added
send_chat_message - Added
set_chat_members
1 tool update
- Added
create_issue_from_chat_message
1 tool update
- Changed
take_project_preset1 field changed- changed
Input schema / properties / preset / descriptionPrevious value: -"Which one: 'requirements'."New value: +"Which one: 'requirements', 'agents', 'jira' or 'season'."
2 tool updates
- Added
get_secret_file_journal - Added
list_secret_files
6 tool updates
- Added
create_claim_embed - Added
create_embed_set - Added
create_term_embed - Added
delete_registry_embed - Added
list_registry_embeds - Added
update_registry_embed
3 tool updates
- Changed
create_project_rule1 field changed- changed
Input schema / properties / trigger / descriptionPrevious value: -"WHEN the rule fires: 'entered' (the default), 'versionReleased', 'subtasksDone', 'subtaskStarted', or from the repository's webhook 'branchCreated', 'mrOpened', 'mrMerged', 'mrClosed', or 'deployed' when a pipeline reports a deployment, or 'actChanged' / 'actTouched' when a legal act the issue cites changed. For any but 'entered', pass an empty 'status'."New value: +"WHEN the rule fires: 'entered' (the default), 'versionReleased', 'subtasksDone', 'subtaskStarted', or from the repository's webhook 'branchCreated', 'mrOpened', 'mrMerged', 'mrClosed', or 'deployed' when a pipeline reports a deployment, or 'actChanged' / 'actTouched' when a legal act the issue cites changed, or 'claimBasisChanged' when a claim the issue cites rests on an act that changed. For any but 'entered', pass an empty 'status'."
- Changed
set_claim1 field changed- changed
Input schema / properties / bases / descriptionPrevious value: -"What it rests on, as a JSON array replacing the list: [{\"kind\":\"page\",\"page\":477,\"note\":\"§3\"},{\"kind\":\"computation\",\"ref\":\"kimmy/gap/m74r5u\"},{\"kind\":\"lean\",\"ref\":\"D5.rank_five\",\"repo\":\"ispacex/d5\"},{\"kind\":\"source\",\"ref\":\"Gupta 1990, Thm 2\"}]. A page is one you may open, by its id; a computation by the name a [comp:…] cites — a runner's job, or a page's saved cell 'wl:477/…/2'; a Lean declaration by its full name, and with 'repo' bound to where code search finds it in that repository of the project (find_lean_declaration) — only a bound declaration with a clean axiom audit lets the claim be 'lean'."New value: +"What it rests on, as a JSON array replacing the list: [{\"kind\":\"page\",\"page\":477,\"note\":\"§3\"},{\"kind\":\"computation\",\"ref\":\"kimmy/gap/m74r5u\"},{\"kind\":\"lean\",\"ref\":\"D5.rank_five\",\"repo\":\"ispacex/d5\"},{\"kind\":\"source\",\"ref\":\"Gupta 1990, Thm 2\"},{\"kind\":\"legal\",\"document\":31,\"place\":\"Article 6(1)(f)\"}]. A page is one you may open, by its id; a computation by the name a [comp:…] cites — a runner's job, or a page's saved cell 'wl:477/…/2'; a Lean declaration by its full name, and with 'repo' bound to where code search finds it in that repository of the project (find_lean_declaration) — only a bound declaration with a clean axiom audit lets the claim be 'lean'; a norm of law by the act's id on the legal shelf (list_legal_references gives it as the reference's document) — an act you may read — and the place in it, or none for the act as a whole."
- Changed
update_project_rule1 field changed- changed
Input schema / properties / trigger / descriptionPrevious value: -"WHEN the rule fires: 'entered', 'versionReleased', 'subtasksDone', 'subtaskStarted', 'branchCreated', 'mrOpened', 'mrMerged', 'mrClosed', 'deployed', 'actChanged' or 'actTouched'. Moving off 'entered' drops the rule's state."New value: +"WHEN the rule fires: 'entered', 'versionReleased', 'subtasksDone', 'subtaskStarted', 'branchCreated', 'mrOpened', 'mrMerged', 'mrClosed', 'deployed', 'actChanged', 'actTouched' or 'claimBasisChanged'. Moving off 'entered' drops the rule's state."
4 tool updates
- Changed
list_claims2 fields changed- changed
Input schema / properties / kind / descriptionPrevious value: -"Only claims of this kind: theorem, lemma, proposition, corollary, conjecture, question."New value: +"Only claims of this kind, one of the project's scale." - changed
Input schema / properties / status / descriptionPrevious value: -"Only claims of this status: open, paper, computer, lean, refuted, retracted."New value: +"Only claims of this status, one of the project's scale."
- Changed
set_claim2 fields changed- changed
Input schema / properties / kind / descriptionPrevious value: -"theorem, lemma, proposition, corollary, conjecture or question. A new claim is a theorem unless said."New value: +"One of the project's scale (list_claims answers its 'kinds'): theorem, lemma, proposition, corollary, conjecture or question on 'math'; position, conclusion, risk or obligation on 'law'. A new claim is the scale's first — a theorem, a position — unless said." - changed
Input schema / properties / status / descriptionPrevious value: -"For a NEW claim: how far it is proved — open, paper, computer, lean, refuted, retracted. Default open."New value: +"For a NEW claim: its status on the project's scale — open, paper, computer, lean, refuted, retracted on 'math'; draft, agreed, practice, disputed, outdated on 'law'. Default the scale's first: open, draft."
- Added
set_claim_scale - Changed
set_claim_status1 field changed- changed
Input schema / properties / status / descriptionPrevious value: -"open, paper, computer, lean, refuted or retracted."New value: +"A status of the project's scale (list_claims answers its 'statuses')."
3 tool updates
- Added
find_lean_declaration - Added
report_lean_audit - Changed
set_claim1 field changed- changed
Input schema / properties / bases / descriptionPrevious value: -"What it rests on, as a JSON array replacing the list: [{\"kind\":\"page\",\"page\":477,\"note\":\"§3\"},{\"kind\":\"computation\",\"ref\":\"kimmy/gap/m74r5u\"},{\"kind\":\"lean\",\"ref\":\"D5.rank_five\"},{\"kind\":\"source\",\"ref\":\"Gupta 1990, Thm 2\"}]. A page is one you may open, by its id; a computation by the name a [comp:…] cites — a runner's job, or a page's saved cell 'wl:477/…/2'."New value: +"What it rests on, as a JSON array replacing the list: [{\"kind\":\"page\",\"page\":477,\"note\":\"§3\"},{\"kind\":\"computation\",\"ref\":\"kimmy/gap/m74r5u\"},{\"kind\":\"lean\",\"ref\":\"D5.rank_five\",\"repo\":\"ispacex/d5\"},{\"kind\":\"source\",\"ref\":\"Gupta 1990, Thm 2\"}]. A page is one you may open, by its id; a computation by the name a [comp:…] cites — a runner's job, or a page's saved cell 'wl:477/…/2'; a Lean declaration by its full name, and with 'repo' bound to where code search finds it in that repository of the project (find_lean_declaration) — only a bound declaration with a clean axiom audit lets the claim be 'lean'."
3 tool updates
- Added
add_to_showcase - Added
list_showcase - Added
remove_from_showcase
1 tool update
- Added
pdf_page_image
3 tool updates
- Added
answer_review_remark - Added
get_wiki_page_reviews - Added
review_wiki_page
2 tool updates
- Changed
export_sources_bib1 field changed- added
Input schema / properties / pageAdded value: +{ + "default": null, + "description": "Only the sources this wiki page cites: its id.", + "type": [ + "integer", + "null" + ] +}
- Added
read_page_literature
Publisher details
- Operator
- Kaiku · Publisher source
- Operator website
- https://kaiku.tech
- Vendor relationship
- First-party
- Documentation
- https://kaiku.tech/en/docs/mcp
- Trust center
- Not available
- Restrictions
- Needs a Kaiku workspace and a personal token minted in Settings → Connect over MCP; no OAuth app.
Related MCP Connectors
- TaskavelOAuthcom.taskavel
Headless task management for bots, apps and AI agents. Remote MCP server, OAuth or access token.
Authenticated MCP access to the AIKI open knowledge commons.
Official Fibery MCP server: query and update your workspace from any AI client via OAuth.
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables AI clients such as Claude, Cursor, VS Code, and Windsurf to list, create, update, and complete workspaces, projects, tasks, and AI agents through OAuth- or token-authenticated tools. It also ships an OpenAPI-to-MCP generator for building agent tools from any OpenAPI spec.3,446 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables AI coding agents to take and progress tasks, hand in completed work with evidence, and enables users to publish, search, and retrieve guides, file bugs, manage inbox/board/activity/logs, and plan tasks over MCP.MIT
- AlicenseNot gradedqualityAmaintenanceMCP server that lets AI agents connect to LTD project workspaces to inspect project health, search and manage tasks, assign owners, and add comments, with scoped tokens and preview-confirm safety for writes.2MIT
- AlicenseNot gradedqualityAmaintenanceExposes a self-hosted shared workspace over MCP where AI agents and their teammates read and write tasks, decisions, docs and results, so each session picks up where the last one left off. It adds hybrid cited search, per-workspace OAuth or scoped tokens, change feeds for cheap re-sync, and an append-only audit trail of every agent or human write.AGPL 3.0
Glama MCP Gateway
Add one secure layer between your agents and this server.