Skip to main content
Glama

Dutify

Server Details

One hosted MCP server for the whole Dutify suite: project management (tasks, sprints, views, custom fields), Dutify Hub call recordings, transcripts and Lens chat, Codexum wiki pages, and Roadmarq feature requests and bugs. Auth: X-API-Key header with a Dutify personal key (du_live_...). Docs: https://github.com/dutifyai/dutify-mcp

Ownership verified
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

B3.3/5.0

Scored across 189 tools

Disambiguation2/5

The domain prefixes (fr_, pm_, wiki_, hub_) help at a high level, but there are multiple genuinely overlapping tools: find_my_workspace/list_workspaces/whoami/list_accounts all serve discovery/identity, and list_spaces duplicates wiki_list_spaces. The set also contains several meta/orientation tools (get_api_catalog, get_endpoint_examples, pm_describe_status_priority_level_endpoints, pm_list_reference_data) whose boundaries require careful reading rather than being immediately obvious.

Naming Consistency3/5

Most tools use snake_case and product-area prefixes, and within each prefix the verb_noun style is generally readable. However, naming is not uniform across the server: some top-level discovery tools (find_my_workspace, whoami, list_accounts, list_boards, list_spaces) lack the domain prefixes used by their siblings (fr_, pm_, wiki_, hub_), so conventions are mixed.

Tool Count1/5

189 tools is far beyond a well-scoped MCP surface and imposes substantial selection and context overhead. Even for a multi-product platform, this surface is an extreme mismatch that should be split into separate, product-specific servers or heavily consolidated.

Completeness3/5

Coverage is broad across feedback, wiki, project management, and meeting/recording workflows, but notable gaps remain. Feedback bugs/requests have create, read, list, moderate, status, assignee, visibility, vote, and delete operations, yet no general update/edit tool; PM has create/update/delete for folders and lists but no update/delete for spaces and no dedicated get-list/get-folder/get-space tools.

Available Tools

189 tools
find_my_workspaceB
Read-onlyIdempotent
Inspect

Unified Dutify find_my_workspace: fresh credential/workspace discovery. Does not require a selected workspace or reserve quota.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

B3/5.0
Behavior3/5

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

Annotations already establish that this is read-only, idempotent, non-destructive, and closed-world. The description adds two useful behavioral facts: no selected workspace is required and no quota is reserved. It still does not explain return behavior or error conditions.

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

Conciseness4/5

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

The description is short and front-loads its main claims without excessive text. It is appropriately sized, though the phrase "fresh credential/workspace discovery" remains vague rather than fully informative.

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

Completeness2/5

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

With no output schema, the description should clarify what the tool actually returns, such as workspace details or credential/account information, and how it relates to sibling discovery tools. It does not provide that, leaving an important gap for an agent trying to invoke it correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so both the account and workspace parameters are already well documented in the schema. The description does not add parameter-specific meaning 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.

Purpose3/5

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

The description says this is for "fresh credential/workspace discovery," which gives a general purpose but does not specify exactly what is returned or how it differs from siblings such as list_workspaces, list_accounts, or whoami. It is more than a pure tautology, but the purpose remains vague.

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

Usage Guidelines3/5

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

The statement that it "does not require a selected workspace or reserve quota" implies it can be called before workspace selection, which is useful usage context. However, it gives no explicit when-to-use guidance versus alternatives and no exclusions.

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

fr_comment_bugAInspect

Add a comment to a bug report. Pass isInternal=true for internal-only. API-key scope: feedback:comments:write.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
contentYes
shortIdYes
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
isInternalNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already establish this is a non-destructive, non-idempotent write with open-world access. The description adds real value on top: it clarifies that comments can be internal-only via isInternal and names the required auth scope (`feedback:comments:write`), which 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.

Conciseness5/5

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

Three short fragments: action, optional-flag semantics, and auth scope. Front-loaded and every sentence has a distinct purpose with no filler.

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

Completeness4/5

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

For a mutation tool with annotations and no output schema, the description covers the action, the key optional parameter, and the permission requirement. It omits what the call returns (e.g., comment ID) and failure modes, which is a minor gap.

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

Parameters3/5

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

Schema coverage is only 40%, and the two undocumented properties (content, shortId) are obvious from name, while the description explains the non-obvious isInternal flag. That covers the semantic gap reasonably but adds nothing about shortId format or content length limits, so a baseline 3 is fair.

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

Purpose4/5

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

States a specific verb and resource ('Add a comment to a bug report'), which cleanly separates it from the request-oriented sibling fr_comment_request. It does not explicitly name that sibling or spell out the bug-vs-request distinction, keeping it just below a 5.

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

Usage Guidelines3/5

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

The isInternal flag's internal-only use case is explained, and the required API-key scope is given. However, there is no guidance on when to prefer this over fr_comment_request or fr_get_bug-style read paths, 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.

fr_comment_requestAInspect

Add a comment to a feature request. Pass isInternal=true to make the comment visible only to users with View Internal Data permission. API-key scope: feedback:comments:write.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
contentYesComment body
shortIdYes
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
isInternalNoDefault: false

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare this as a non-read-only, non-idempotent, open-world write, so the safety profile is covered. The description adds real value beyond them: the internal-visibility semantics tied to the `View Internal Data` permission and the required `feedback:comments:write` API-key scope. It stops short of describing what happens on failure or duplicate submission.

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

Conciseness5/5

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

Three short sentences, front-loaded with the action, then the key flag behavior, then the auth requirement. Nothing is redundant or padded.

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

Completeness4/5

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

For a 5-parameter mutation with well-documented schema properties and full annotation coverage, the description supplies the missing permission and scope context. It doesn't indicate what a successful call returns (no output schema exists), which is a minor remaining gap.

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

Parameters4/5

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

Schema coverage is 80%, so the baseline would be 3, but the description meaningfully expands the sparse `isInternal` schema entry ("Default: false") by explaining what true actually does and what permission the visibility depends on. `content` and `shortId` remain self-evident from the schema.

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

Purpose5/5

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

States a specific verb (Add) and resource (a comment to a feature request), which unambiguously separates it from the sibling fr_comment_bug. An agent can distinguish the target resource without opening either schema.

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

Usage Guidelines3/5

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

Usage is implied by "Add a comment to a feature request", but the description never names fr_comment_bug as the alternative for bug comments, nor states prerequisites or when-not to use it. Guidance for isInternal is provided, but that is parameter-level, not tool selection.

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

fr_create_bugAInspect

Create a new bug report on a board. Severity and productArea are resolved by name (lenient match). Environment is a free-form map (browser, OS, url, etc.). API-key scope: feedback:bugs:write.

NameRequiredDescriptionDefault
titleYes
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
severityNoOptional severity name
boardSlugYes
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
isSecurityNoDefault false. True forces the bug to private regardless of board visibility.
environmentNoFree-form map: {browser, os, version, url, ...}
productAreaNoOptional product area name
actualResultNo
expectedResultNo
stepsToReproduceNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare the mutation profile (not read-only, non-idempotent, open-world, non-destructive), so the bar is lower. The description adds real behavioral context: severity/productArea are resolved leniently by name, environment is an unconstrained free-form map, and the required auth scope. It stops short of stating what happens when a name fails to resolve or what is returned.

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

Conciseness5/5

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

Four short sentences, purpose front-loaded, with each subsequent sentence adding a distinct piece of non-redundant information (name resolution, environment shape, auth scope). Zero filler.

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

Completeness3/5

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

For an 11-parameter mutation with nested object and no output schema, the description covers creation semantics and auth but omits what a successful call returns and how to obtain a valid boardSlug. Adequate to call it, incomplete for calling it correctly on the first try.

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

Parameters4/5

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

Schema coverage is only 55%, but the description supplies meaning the schema lacks for the two resolution-sensitive params (severity, productArea are matched by name leniently) and clarifies the environment map's shape. The remaining undocumented fields (actualResult, expectedResult, stepsToReproduce) are self-descriptive by name, so the gap is modest.

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

Purpose4/5

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

States a specific verb and resource: 'Create a new bug report on a board,' which implicitly separates it from fr_create_request. It does not explicitly name or exclude the sibling request-creation tool, so an agent must infer the bug-vs-request distinction.

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

Usage Guidelines3/5

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

The required API-key scope `feedback:bugs:write` is a genuine usage precondition, but there is no explicit statement of when to use this versus fr_create_request, nor guidance on discovering boardSlug via list_boards. Usage is implied rather than directed.

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

fr_create_requestAInspect

Create a new feature request on a board. Category is resolved by name (lenient match). No turnstile token required — API-key authentication is sufficient. Returns the new request with assigned shortId. API-key scope: feedback:requests:write.

NameRequiredDescriptionDefault
titleYes
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
categoryNoOptional category name
boardSlugYes
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
descriptionNoPlain text or markdown body

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already flag a non-idempotent, open-world, non-destructive write. The description adds real value beyond them: no turnstile token is required, API-key auth suffices, the required OAuth scope is `feedback:requests:write`, and the response includes the assigned shortId. It does not mention possible side effects (notifications, duplicate submissions on retry given idempotentHint=false), which keeps it out of 5 territory.

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

Conciseness5/5

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

Four short sentences, zero filler: action first, then the non-obvious category behavior, then auth/return details, then the scope. Every sentence carries information an agent needs.

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

Completeness4/5

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

For a 6-param creation tool with no output schema, the description supplies the authentication model, permission scope, the return payload, and the one subtle parameter behavior. It falls short only on idempotency/retry guidance and on routing versus the sibling create tool.

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

Parameters4/5

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

Schema coverage is 67% and the description meaningfully augments it by explaining that `category` is resolved by name using a lenient match, which is more than the schema's "Optional category name". The remaining params (account, workspace, boardSlug, description) are handled by their schema descriptions.

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

Purpose4/5

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

The description gives a specific verb+resource ("Create a new feature request on a board") and the resource name implicitly distinguishes it from fr_create_bug and pm_create_task. It never names an alternative explicitly, but an agent can tell which create tool to pick by resource type alone.

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

Usage Guidelines3/5

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

Usage context is implied: this is the tool for feature requests, with no turnstile token needed and API-key auth sufficient. There is no explicit when-to-use/when-not statement relative to fr_create_bug, fr_vote_request, or a general pm_create_task, 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.

fr_delete_bugA
Destructive
Inspect

Permanently delete a bug report. Requires Manage Queue permission. Irreversible. API-key scope: feedback:bugs:write.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
shortIdYes
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=false, yet the description still adds real value by stating the operation is permanent/irreversible, names the required `Manage Queue` permission, and gives the API-key scope `feedback:bugs:write`. It stops short of saying what happens to attached comments or whether a 404 occurs for a missing shortId, so it is strong but not exhaustive.

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

Conciseness5/5

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

Four terse fragments, front-loaded with the action and object, then the permission gate, then irreversibility, then the scope. No filler and nothing an agent must scan past.

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

Completeness4/5

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

For a destructive mutation with no output schema, the description covers the safety profile (irreversible), authorization (Manage Queue, feedback:bugs:write) and target (a bug report), which is most of what an agent needs. Remaining gap is the undocumented required shortId, which is arguably a schema defect rather than a description one.

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

Parameters2/5

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

The description says nothing about any parameter. The two optional parameters (account, workspace) are well documented in the schema, but the single required parameter 'shortId' has no description anywhere, and the description does not compensate by explaining its format or where to obtain it.

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

Purpose5/5

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

The description opens with a specific verb and resource ('Permanently delete a bug report') and the 'bug' qualifier plus the tool name distinguish it from fr_delete_request and other delete siblings in the same family. An agent can tell exactly what object this operates on without inspecting the schema.

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

Usage Guidelines3/5

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

The permission requirement and irreversibility imply this is a last-resort operation, but the description never states when to choose it over alternatives (e.g., fr_moderate_bug, fr_set_bug_visibility) or any precondition such as resolving vs. deleting. Usage is implied rather than directed.

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

fr_delete_requestA
Destructive
Inspect

Permanently delete a feature request. Requires Manage Queue permission. Returns 204 on success. This operation is irreversible — confirm with the user before calling unless the intent is unambiguous. API-key scope: feedback:requests:write.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
shortIdYes
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true and idempotentHint=false, but the description adds real value on top: the required `Manage Queue` permission, the `feedback:requests:write` API-key scope, and the exact 204 response. The irreversibility warning plus the confirm-first rule gives the agent the operational and authorization picture 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.

Conciseness5/5

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

Five short sentences, each carrying distinct information (action, permission, return code, safety rule, auth scope) with the destructive nature front-loaded. No repetition and nothing that could be cut without losing a fact the agent needs.

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

Completeness4/5

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

For a destructive mutation with no output schema, the description covers what an agent needs to call it safely: authorization requirements, the 204 success signal, and irreversibility. The only remaining hole is the meaning/format of `shortId`, which is left entirely unspecified.

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

Parameters3/5

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

With 67% schema coverage and the two optional parameters (account, workspace) fully documented in the schema, the baseline is 3. Crucially, the sole required parameter `shortId` has no description in the schema and gets no explanation here either — the description never clarifies that this is the short identifier rather than a numeric ID, leaving the most important input ambiguous.

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

Purpose5/5

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

"Permanently delete a feature request" is a specific verb + resource + permanence qualifier. It is unambiguously distinguishable from the sibling fr_delete_bug because the resource noun itself (request vs. bug) carries the differentiation, so an agent can select without opening a schema.

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

Usage Guidelines4/5

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

It gives a clear conditional rule of engagement: confirm with the user before calling unless intent is unambiguous. That tells the agent *how* to use it, but it never names an alternative path (e.g. moderating/hiding instead of deleting) or states when deletion is inappropriate versus a softer sibling like fr_moderate_request.

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

fr_get_bugA
Read-onlyIdempotent
Inspect

Get a bug report by short ID (e.g. "BG-99"). Returns full detail: title, reproduction steps, expected/actual result, severity, status, product area, assignee, affectedCount, environment, comments count. Internal notes and linkedIssueUrl populated only for View Internal Data permission. API-key scope: feedback:bugs:read.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
shortIdYesShort ID like "BG-99"
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4/5.0
Behavior4/5

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

Annotations already cover the read-only/idempotent safety profile, and the description adds real context beyond them: internal notes and linkedIssueUrl are conditionally populated based on `View Internal Data` permission, and the required API-key scope is named. It stops short of describing not-found/error behavior or how comments are surfaced.

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

Conciseness5/5

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

Three sentences, front-loaded with the identifying action, then the returned payload, then the permission/scope caveats. The field enumeration is dense but earns its place by telling the agent what data it can rely on.

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

Completeness4/5

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

With no output schema, the description usefully enumerates the returned fields, and the permission/scope constraints are documented. It is nearly complete for a simple read tool, missing only failure behavior and whether comments themselves are returned or just a count.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already explains account, shortId and workspace. The description repeats the shortId example format but adds nothing for the multi-account `account` or `workspace` override parameters, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ("Get a bug report") plus the exact selector ("by short ID, e.g. BG-99"). This is clearly distinguishable from the list/create/comment siblings without opening a schema.

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

Usage Guidelines3/5

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

Usage is only implied by the singular-by-ID framing; there is no explicit statement of when to use this versus fr_list_bugs or fr_get_request, and no prerequisites called out. An agent can infer the case, but nothing routes it explicitly.

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

fr_get_requestA
Read-onlyIdempotent
Inspect

Get a feature request by short ID (e.g. "FR-42"). Returns full detail: title, description, status, category, milestone, voteCount, commentCount, reactions. Internal notes and linkedTaskIds are populated only when the caller has View Internal Data permission. API-key scope: feedback:requests:read.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
shortIdYesShort ID like "FR-42"
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, but the description adds real context: the returned fields, that internal notes and linkedTaskIds are gated behind the `View Internal Data` permission, and the required `feedback:requests:read` API-key scope. That permission-conditional field population is exactly the kind of behavior an agent cannot infer from structured fields.

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

Conciseness5/5

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

Three short sentences, front-loaded with the identifier requirement and followed by return contents and permission caveats; there is no filler and each sentence contributes new information.

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

Completeness4/5

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

With no output schema, naming the returned fields is valuable and the permission/scope notes cover the main surprises. A minor gap remains around error behavior for unknown or inaccessible short IDs, but nothing critical is missing for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so all three parameters (account, shortId, workspace) are already documented. The description's only parameter-related addition is the "FR-42" example, which the schema already carries, so it adds little beyond the schema baseline.

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

Purpose5/5

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

States a specific verb and resource ("Get a feature request") plus the identifier type (short ID such as "FR-42"), which cleanly separates it from fr_list_requests and from the bug counterpart fr_get_bug.

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

Usage Guidelines3/5

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

Usage is only implied: an agent infers this is the single-record lookup tool when it already has a short ID. There is no explicit statement about when to prefer this over fr_list_requests or when the ID is unknown, and no guidance on what happens when the request does not exist.

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

fr_list_bugsA
Read-onlyIdempotent
Inspect

List bug reports on a feedback board (by board slug). Filter by severity and/or status name (lenient match). API-key scope: feedback:bugs:read.

NameRequiredDescriptionDefault
statusNoBug status name (lenient match)
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
severityNoSeverity level name (lenient match)
boardSlugYes
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower, and the description still adds real context: the required `feedback:bugs:read` scope and the fact that filters use lenient matching. It omits pagination, default result limits, and ordering behavior, which are the main remaining unknowns.

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

Conciseness5/5

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

Two tight sentences with the resource and board-slug scoping front-loaded, followed by filter behavior and the auth scope. No filler or redundancy.

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

Completeness3/5

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

For a 5-parameter list tool with no output schema, the definition covers purpose, filters, and permission scope but says nothing about result shape, paging, or default volume. An agent can call it, but cannot predict what comes back.

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

Parameters3/5

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

Schema coverage is 80%, so status, severity, account, and workspace are already documented in the schema. The description adds only that severity and status can be combined ('and/or'); boardSlug remains undocumented in both places. Baseline 3 is appropriate.

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

Purpose4/5

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

States a specific verb and resource ('List bug reports on a feedback board') and scopes it by board slug, which implicitly separates it from fr_list_requests. It does not name a sibling explicitly, so the 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.

Usage Guidelines3/5

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

The description conveys the obvious context (list bugs for a given board, optionally filtered) and adds the required API-key scope. It never says when to use fr_list_requests vs fr_list_bugs, nor any exclusion or prerequisite beyond the permission string.

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

fr_list_requestsA
Read-onlyIdempotent
Inspect

List feature requests on a feedback board (by board slug). Filter by status / category / milestone name (lenient — trimmed + case-insensitive). Pass q to search request titles instead. Paginated via page/size. API-key scope: feedback:requests:read.

NameRequiredDescriptionDefault
qNoTitle search query (ignores other filters when set)
pageNoZero-based page number (default 0)
sizeNoPage size (default 20, max 200)
statusNoStatus name filter (e.g. "In Progress")
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
categoryNo
boardSlugYesBoard slug (from list_boards)
milestoneNo
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower, but the description still adds real behavior: lenient trimmed/case-insensitive matching, pagination via page/size, `q` overriding other filters, and the required API-key scope. It doesn't describe the response item shape, 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.

Conciseness5/5

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

Four short clauses, front-loaded with the core action, then filters, search mode, pagination, and auth scope. No filler; each sentence carries distinct information.

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

Completeness4/5

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

For a read-only paginated list with no output schema, the description covers filtering, search semantics, pagination, and auth scope. The only gap is return-shape/envelope detail, which is minor since readOnly list tools are predictable and account/workspace params are documented in the schema.

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

Parameters4/5

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

With 78% schema coverage, baseline is 3, but the description adds meaning the schema lacks: the lenient normalized matching semantics for status/category/milestone (category and milestone have no schema descriptions at all) and the precedence rule for `q`. That meaningfully compensates for the coverage gap.

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

Purpose5/5

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

States a specific verb and resource ('List feature requests') plus scope ('on a feedback board (by board slug)'), which clearly separates it from fr_list_bugs and the fr_get_* siblings. 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.

Usage Guidelines4/5

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

Gives explicit guidance on the two modes: filter by status/category/milestone, or pass `q` to search titles instead. It stops short of naming sibling alternatives (e.g. fr_get_request for a single item), so it's 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.

fr_moderate_bugA
Destructive
Inspect

Approve, reject, or mark a bug as spam. Action is case-insensitive. Requires Manage Queue permission. API-key scope: feedback:moderation:write.

NameRequiredDescriptionDefault
actionYes
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
shortIdYes
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true, idempotentHint=false and readOnlyHint=false, so the mutation risk is disclosed structurally. The description earns credit for adding context the annotations cannot carry: the required `Manage Queue` permission, the `feedback:moderation:write` API-key scope, and the case-insensitivity of the action value. It stops short of saying what approve/reject actually changes downstream, such as visibility or notifications.

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

Conciseness5/5

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

Three short, front-loaded sentences with zero filler: action, then auth requirement, then scope. Every sentence carries distinct information.

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

Completeness4/5

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

For a destructive mutation with no output schema, the definition covers the critical operational facts: permission, scope, action semantics and the action enum. The remaining gap is the undocumented `shortId` requirement and any note on the effect of each action, which keeps it short of fully complete.

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

Parameters3/5

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

Schema coverage is 50%: `account` and `workspace` are well documented in the schema, while `shortId` has no description anywhere. The description compensates only for `action` with the case-insensitivity note; it says nothing about what a shortId is or how to obtain one, which is the one required parameter left unexplained.

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

Purpose4/5

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

The description names a specific verb set (approve, reject, mark as spam) against a specific resource (a bug), and the enum in the schema confirms the three actions. It does not distinguish itself from the obvious sibling fr_moderate_request, so an agent must infer which resource type to target.

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

Usage Guidelines3/5

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

Usage is only implied: the reader must know a bug needs moderation to select this tool. There is no explicit statement of when to use it versus fr_moderate_request, and no guidance on preconditions such as the bug being in a pending-moderation state.

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

fr_moderate_requestA
Destructive
Inspect

Approve, reject, or mark a feature request as spam. Action is case-insensitive. Requires Manage Queue permission. API-key scope: feedback:moderation:write.

NameRequiredDescriptionDefault
actionYesModeration action
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
shortIdYes
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare destructive=true, non-idempotent, non-read-only, so the description is not the sole source of behavioral disclosure. It still adds real value by stating the required permission and the write scope `feedback:moderation:write`, which are not in the annotations. It stops short of saying what happens to a request under each action (e.g., whether spam hides it or reject deletes it).

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

Conciseness5/5

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

Three short sentences, front-loaded with the operations, then qualification, then auth constraints. Nothing superfluous.

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

Completeness4/5

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

No output schema exists, so return values need not be described, and the auth/permission/scope requirements plus the destructive annotation cover the safety picture for a mutation tool. The remaining gap is the per-action effect on the target request, which an agent would need to predict consequences.

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

Parameters3/5

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

Schema coverage is 75% and the description adds a genuinely useful detail not in the schema: action is case-insensitive. But the undocumented `shortId` required parameter gets no explanation in either place, and the description says nothing about how account/workspace interact with moderation calls.

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

Purpose4/5

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

States a specific verb set (approve/reject/mark spam) against a specific resource (feature request), which implicitly separates it from the sibling fr_moderate_bug. It does not name the sibling or the alternative status tooling (fr_set_request_status) explicitly, so differentiation is inferred rather than spelled out.

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

Usage Guidelines3/5

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

The prerequisite 'Requires `Manage Queue` permission' and the API-key scope give actionable context, and case-insensitivity is noted. However, there is no guidance on when to use moderation versus fr_set_request_status, nor on when each action (approve vs reject vs spam) is appropriate.

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

fr_set_bug_assigneeA
Destructive
Inspect

Assign or unassign a bug. Provide assigneeEmail (resolved case-insensitive against workspace members) OR assigneeId (UUID). Exactly one; both = 400. Passing neither unassigns. API-key scope: feedback:bugs:write.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
shortIdYes
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
assigneeIdNoUser UUID
assigneeEmailNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and idempotentHint=false; the description adds genuinely new behavioral facts: the required API-key scope `feedback:bugs:write`, that emails resolve case-insensitively against workspace members, and the 400 on dual-assignment. Missing is what happens to the previous assignee (notification/replacement) and the success response, but the disclosure goes well past the annotations.

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

Conciseness5/5

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

Three compact sentences, verb-and-resource first, then the parameter rule, then the auth scope — no filler and nothing that could be cut without losing information.

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

Completeness5/5

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

For a single-purpose mutation with no output schema and annotations already covering safety, the description supplies the remaining decision-critical details: mutual exclusivity, unassign default, email resolution, and required scope.

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

Parameters4/5

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

The critical cross-field constraint (exactly one of two assignee params, neither means unassign) cannot be expressed in this flat schema and is stated clearly, along with email resolution rules. shortId is left unexplained, but schema coverage at 60% handles account and workspace.

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

Purpose5/5

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

Opens with a specific verb pair (assign/unassign) and resource (bug), and the semantics of the two directions are stated immediately. An agent can distinguish this from fr_set_bug_status or fr_set_bug_visibility without reading any schema.

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

Usage Guidelines4/5

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

Gives explicit call-shape rules: supply exactly one of assigneeEmail or assigneeId, both yields 400, and neither unassigns. It does not contrast with sibling tools (e.g. status vs. assignee vs. visibility changes), 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.

fr_set_bug_statusB
Destructive
Inspect

Change a bug status by name (lenient match against the board's bug-status set). API-key scope: feedback:bugs:write.

NameRequiredDescriptionDefault
statusYes
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
shortIdYes
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

B3.3/5.0
Behavior3/5

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

The annotations already declare this as a destructive, non-idempotent, open-world mutation, so the safety profile is covered. The description adds useful behavioral context: status matching is lenient against the board's bug-status set and the required API scope is `feedback:bugs:write`. It does not explain reversibility or side effects 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.

Conciseness5/5

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

The description is two short, front-loaded clauses with no wasted text. The core action and matching behavior come first, followed by the API scope.

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

Completeness3/5

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

For a destructive mutation with annotations and no output schema, the description covers purpose and one important behavioral trait. However, it lacks usage guidance relative to siblings and does not explain the `shortId` parameter or the expected effect of the status change.

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

Parameters3/5

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

Schema description coverage is 50%; account and workspace are fully documented in the schema. The description adds meaning for the `status` parameter by specifying lenient name matching against the board's bug-status set, but it does not clarify `shortId` beyond its required status.

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

Purpose4/5

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

The description states a specific verb and resource: change a bug status by name. It also clarifies that matching is lenient against the board's bug-status set, which distinguishes it from a generic update. It does not explicitly contrast with sibling fr_set_request_status, but the bug-status wording is sufficiently clear.

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

Usage Guidelines2/5

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

The description says what the tool does but gives no guidance on when to use it versus alternatives such as fr_set_request_status. It also omits any prerequisites or conditions, aside from the API-key scope note.

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

fr_set_bug_visibilityB
Destructive
Inspect

Toggle a bug's public visibility. Security bugs stay private regardless. API-key scope: feedback:bugs:write.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
shortIdYes
isPublicYes
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the bar is lower. The description nonetheless adds genuinely non-obvious behavior — the security-bug invariant that overrides the caller's intent — and the required API-key scope (`feedback:bugs:write`), which is auth context the annotations do not carry.

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

Conciseness4/5

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

Three short, front-loaded sentences with no filler; the action comes first, followed by the caveat, then the auth requirement. Only the backticked scope token is slightly noisy, but it carries real information.

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

Completeness3/5

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

For a destructive mutation with no output schema, the description covers purpose, one key invariant, and auth scope, but omits what happens when a security bug is targeted (silent no-op vs. error), whether related objects (comments, attachments, linked requests) change visibility, and how shortId is formatted. An agent could still call it, but not predict the outcome precisely.

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

Parameters2/5

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

Schema coverage is only 50%: shortId and isPublic have no descriptions in the schema, and the description provides no meaning for either. Worse, 'toggle' suggests flipping current state while the required isPublic boolean implies setting an explicit target state — the description leaves that ambiguity unresolved, so it adds nothing and mildly misleads.

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

Purpose4/5

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

The description opens with a specific verb and resource: 'Toggle a bug's public visibility,' so an agent immediately knows this mutates visibility state rather than status, assignee, or content. It doesn't explicitly contrast with siblings like fr_set_bug_status or fr_set_bug_assignee, but the resource-level distinction is clear enough.

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

Usage Guidelines3/5

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

There is one real constraint — security bugs stay private regardless — which tells the agent this call may be a no-op for that class of bug. Beyond that there is no when-to-use guidance, no mention of prerequisites (e.g., ownership/moderation rights), and no named alternative for related visibility operations.

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

fr_set_request_statusA
Destructive
Inspect

Change a feature request's status by name. The name is resolved leniently against the request's board's status set (trim + case-insensitive). Returns the updated request detail. API-key scope: feedback:requests:write.

NameRequiredDescriptionDefault
statusYesStatus name (e.g. "In Progress")
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
shortIdYes
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare the mutation profile (readOnlyHint=false, destructiveHint=true, idempotentHint=false), and the description adds valuable behavior beyond that: lenient status-name resolution via trim plus case-insensitive matching, the board-scoped status set, the returned updated request detail, and the required API-key scope. It does not explain failure behavior when the status name is invalid, but the annotation burden is already partly covered.

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

Conciseness5/5

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

The description is three tight sentences with the main action front-loaded, followed by resolution behavior, return value, and auth scope. Every sentence adds useful information without repetition.

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

Completeness4/5

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

For a mutation tool with annotations covering the safety profile and no output schema, the description is largely complete: it states the action, status resolution behavior, return shape, and auth scope. Minor gaps remain around invalid-status handling and the undocumented shortId parameter, but nothing critical for invocation is missing.

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

Parameters4/5

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

Schema coverage is 75%, so the schema already documents account, workspace, and status. The description adds real semantic value for the status parameter by explaining that the name is resolved leniently against the request's board status set, going beyond the schema's simple example.

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

Purpose5/5

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

The description uses a specific verb and resource: changing a feature request's status by name. The feature-request scope distinguishes it from the sibling bug-status tool, so an agent can identify the correct tool without inspecting schemas.

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

Usage Guidelines2/5

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

It implies the tool changes a status, but gives no explicit when-to-use guidance, prerequisites, or comparison to alternatives such as fr_set_bug_status. The API-key scope is useful context, but it is not usage guidance.

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

fr_toggle_bug_affectedA
Destructive
Inspect

Toggle the caller's "I'm affected" marker on a bug. Returns the updated bug detail with new affectedCount. API-key scope: feedback:bugs:write.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
shortIdYes
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare the write/non-idempotent/destructive profile, and the description adds useful context: the return value (updated bug detail with new affectedCount) and the required API-key scope `feedback:bugs:write`. It does not explain the surprising destructiveHint for what is a reversible self-toggle, but the toggle semantics and scope disclosure are valuable additions.

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

Conciseness5/5

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

Two tight sentences, front-loaded with the action and followed by the concrete return value and scope. Every clause earns its place.

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

Completeness4/5

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

No output schema exists, but the description states what is returned (updated bug detail + affectedCount). Scope is disclosed. The only gap is the undocumented `shortId` semantics, which slightly under-informs for the sole required parameter.

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

Parameters3/5

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

Schema coverage is 67%; account and workspace are richly documented in the schema, but required `shortId` has no description there and the tool description does not clarify its format or meaning either. Baseline 3 is appropriate given the partial schema coverage and minimal compensation.

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

Purpose5/5

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

Specific verb (Toggle) plus specific resource (the caller's "I'm affected" marker on a bug). No sibling performs this operation (fr_vote_request votes, fr_get_bug reads), so an agent can distinguish it clearly without opening a schema.

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

Usage Guidelines3/5

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

The word "Toggle" implies the use case (flip your own affected state) and the on/off nature is conveyed. However there is no explicit when-to-use clause, no when-not, and no named alternative among siblings. 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.

fr_vote_requestB
Destructive
Inspect

Toggle a vote or emoji reaction on a feature request. Passing emoji=null or omitting the field registers a plain upvote. Calling the tool again with the same emoji removes the vote (idempotent toggle). API-key scope: feedback:votes:write.

NameRequiredDescriptionDefault
emojiNoOptional emoji (e.g. "👍")
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
shortIdYes
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

B3.4/5.0
Behavior1/5

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

The description explicitly calls the operation an 'idempotent toggle', while the annotations set idempotentHint=false. That is a direct contradiction, and the description also does not reconcile destructiveHint=true, leaving the agent with conflicting safety and idempotency signals.

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

Conciseness5/5

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

Three tight sentences front-load the action and toggle rule, followed by a useful API-key scope note. There is no wasted framing or repetition.

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

Completeness3/5

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

Covers the core toggle behavior and emoji/auth scope, but leaves return behavior unspecified despite there being no output schema. It also does not address the destructiveHint=true annotation, which matters for an agent invoking a mutation.

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

Parameters4/5

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

Schema coverage is already 75%, and the schema documents account and workspace well. The description adds meaningful emoji semantics beyond the schema by explaining that null or omitted means plain upvote and that repeating the same emoji removes the vote.

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

Purpose4/5

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

States a specific verb ('Toggle') and resource ('vote or emoji reaction on a feature request'), and the plain-upvote distinction makes the scope concrete. It does not explicitly differentiate from nearby toggle-style siblings such as fr_toggle_bug_affected, 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.

Usage Guidelines4/5

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

Explains how to register a plain upvote (omit emoji or pass null) and that calling again with the same emoji removes the vote. This gives clear invocation context, but it does not name alternatives or state when not to use this tool.

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

get_api_catalogB
Read-onlyIdempotent
Inspect

Discover deployed API tags or a tag schema for one product. Prefers the versioned service-qualified catalog; falls back only when unsupported. Discovery never grants access.

NameRequiredDescriptionDefault
tagNo
accountNo
serviceYes
workspaceNo

TDQS

B3.3/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower, and the description adds a genuine authorization disclosure: 'Discovery never grants access.' It also surfaces the fallback behavior. However, it says nothing about what the response shape or pagination looks like, so it's not fully complete.

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

Conciseness4/5

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

Two compact sentences with no filler, front-loaded with the discovery purpose. The fallback sentence is slightly internal-context heavy against the little parameter value it adds, keeping it from a 5.

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

Completeness2/5

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

With 4 undocumented parameters, no output schema, and no per-parameter explanation, the description leaves too much for the agent to infer. It should explain how account/workspace/tag scope results and what 'tag schema' returns.

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

Parameters2/5

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

Schema description coverage is 0% for 4 parameters, so the description carries the full burden but only implicitly covers two of them ('tags' for tag, 'one product' for service). The account and workspace parameters are undocumented in both schema and description.

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

Purpose4/5

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

States a specific verb (Discover) and resource (deployed API tags or a tag schema) for one product, which is clear enough that an agent knows what it retrieves. It doesn't name or differentiate itself from any sibling (e.g., get_endpoint_examples), so it stops short of full disambiguation.

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

Usage Guidelines3/5

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

Usage is implied ('Discover... for one product') and the required service parameter suggests scoping, but there is no explicit when-to-use vs when-to-use-alternative guidance. The 'prefers versioned... falls back only when unsupported' sentence describes internal catalog selection, not agent-facing routing.

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

get_endpoint_examplesA
Read-onlyIdempotent
Inspect

Fetch the request/response example payloads (full JSON values) for a Dutify API resource tag. Use this when you're about to write rich content via a tool that accepts a TipTap content parameter (e.g. wiki_create_page) and need a concrete reference of what the doc shape looks like — banners, collapsibles, mermaid diagrams, code blocks with language, mentions, inline labels, tables, task lists, etc. Pass the resource tag (e.g. "Wiki Pages (Lite)", "Milestone Articles"). Optionally narrow with operationId (e.g. "createPage") and name (e.g. "full" or "full-tiptap") — both names appear in the per-tag detail response so an agent can pick exactly the example it needs without paying tokens for the rest. Returns the catalog JSON; the example payloads are under operations[*].requestBodyExamples[name].value.

Tag list (lightweight) is at GET /v1/api-catalog. Per-tag detail (schemas, no example bodies) is at GET /v1/api-catalog/{tag}. This tool calls the third tier — GET /v1/api-catalog/{tag}/examples — which carries the heavy payloads.

NameRequiredDescriptionDefault
tagYesResource tag, e.g. "Wiki Pages (Lite)", "Milestone Articles", "Tasks". Pass it verbatim — the case and spacing matter.
nameNoOptional: narrow to one named example. Common names: "minimal", "full", "full-tiptap", "full-markdown". Names appear in the per-tag detail response under each operation's requestBody.examples.
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
operationIdNoOptional: narrow to one operation. Operation IDs come from the spec; they appear in the per-tag detail response next to each operation summary.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower; the description still adds meaningful traits: the response is a catalog JSON with payloads at `operations[*].requestBodyExamples[name].value`, and that this tier carries the heavy payloads. It does not discuss auth or account/workspace selection, but the schema covers those.

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

Conciseness4/5

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

Front-loads the purpose and the trigger condition, then parameter guidance, then the endpoint tier explanation. Dense and mostly earning its place, though the three-tier catalog recap at the end is slightly verbose for a tool the agent has probably already reasoned about.

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

Completeness5/5

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

With five parameters, no output schema, and no truncation hints, the description supplies the missing return-shape information (the `operations[*].requestBodyExamples[name].value` path) and the narrowing strategy. Nothing needed to invoke it correctly is absent.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3; the description goes further by giving concrete example values for tag ('Wiki Pages (Lite)'), operationId ('createPage'), and name ('full', 'full-tiptap') and explaining where those names come from (the per-tag detail response). This meaningfully supplements the schema.

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

Purpose5/5

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

States a specific verb and resource ('Fetch the request/response example payloads ... for a Dutify API resource tag') and explicitly distinguishes itself from the sibling catalog tools get_api_catalog (tag list) and the per-tag detail endpoint, naming which tier it calls. An agent can tell exactly what this returns versus its neighbors.

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

Usage Guidelines5/5

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

Gives an explicit trigger condition ('when you're about to write rich content via a tool that accepts a TipTap content parameter, e.g. wiki_create_page'), names the lighter alternatives and when to use them, and explains how to narrow with operationId/name to avoid paying tokens for unused examples.

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

hub_clear_call_custom_promptA
Destructive
Inspect

Remove the caller's own per-call prompt. Their next hub_regenerate_summary uses their instruction set without a per-call prompt. Requires recordings:write scope.

NameRequiredDescriptionDefault
idYesUserCall id (integer), from hub_list_calls.
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=false; the description adds genuinely new context by disclosing the required recordings:write scope and the concrete consequence for the next regeneration. It omits what happens if no per-call prompt exists (error vs silent no-op), which matters given non-idempotency.

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

Conciseness5/5

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

Three short sentences, front-loaded with the action and scope, then consequence, then auth requirement — no filler or repetition of structured fields.

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

Completeness5/5

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

For a simple single-target removal with no output schema, the description covers purpose, sibling scoping, downstream effect, and auth requirement — 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.

Parameters3/5

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

Schema description coverage is 100%, so the id, account, and workspace parameters are fully documented in the schema. The description adds nothing about them; baseline 3 applies since the schema does all the work.

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

Purpose4/5

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

States a specific verb ("Remove") and a precisely scoped resource ("the caller's own per-call prompt"), which implicitly separates it from the event- and series-level clear siblings. It stops short of naming those siblings, but the "per-call" qualifier does the discrimination work.

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

Usage Guidelines3/5

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

The description explains the downstream effect (the next hub_regenerate_summary falls back to the instruction set), which implies usage context, but never states when to call this versus hub_set_call_custom_prompt or the event/series variants, and gives no prerequisites beyond scope.

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

hub_clear_event_custom_promptA
Destructive
Inspect

Remove one occurrence's own prompt. The series prompt, if any, keeps applying on its own — nothing 'falls back', the series prompt was already in use. Requires recordings:write scope.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
eventIdYesEvent id from hub_list_calendar_events.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=false, and readOnlyHint=false, so the safety profile is covered structurally. The description adds genuinely non-obvious behavioral context: clearing the occurrence prompt does not cause a fallback to anything, because the series prompt was already in effect, plus the recordings:write authorization requirement. It stops short of saying whether clearing a non-existent prompt errors or how to restore it.

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

Conciseness5/5

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

Two sentences, front-loaded with the action, second sentence devoted entirely to the one non-obvious semantic point (no fallback) and the scope requirement. No filler and nothing repeated from the schema.

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

Completeness5/5

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

Clear and complete for a deterministic operation whose three parameters are fully documented in the schema and whose safety profile is in annotations. The one thing an agent could get wrong here — assuming the series prompt disappears too — is explicitly addressed.

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

Parameters3/5

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

Schema description coverage is 100%, with account, eventId, and workspace all documented in the schema itself (including the eventId pointer to hub_list_calendar_events). The description adds nothing about parameter formats, so the baseline 3 applies rather than a higher score.

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

Purpose4/5

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

States a specific verb ('Remove') and a precise resource ('one occurrence's own prompt'), and implicitly separates it from the series-level siblings by noting the series prompt is untouched. It never names the sibling tools (hub_clear_series_custom_prompt, hub_clear_call_custom_prompt) explicitly, and 'occurrence' is never mapped back to 'event', so the tool name has to do some work.

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

Usage Guidelines3/5

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

The description clarifies the outcome of clearing (series prompt continues to apply) which implies the use case: removing a per-occurrence override only. However, it gives no explicit guidance on when to choose this over hub_clear_series_custom_prompt or hub_clear_call_custom_prompt, and no note on prerequisites beyond the scope requirement.

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

hub_clear_series_custom_promptA
Destructive
Inspect

Remove a series' custom prompt. Each occurrence keeps only its own prompt, if it has one. Never clear a series prompt to 'avoid a conflict' with an occurrence prompt: there is no conflict, both apply, and clearing it drops instructions every other occurrence relies on. Requires recordings:write scope.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
seriesMasterIdYesSeries master id from hub_list_calendar_events.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations cover the destructive flag, but the description adds genuine context beyond them: the auth requirement ('Requires recordings:write scope'), the consequence to other occurrences ('drops instructions every other occurrence relies on'), and the post-state ('Each occurrence keeps only its own prompt'). This is exactly the extra context annotations can't convey.

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

Conciseness5/5

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

Front-loads the core action, then the misuse warning, then the scope requirement. Every sentence earns its place with no filler; the caution sentence justifies its length by preventing a costly error.

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

Completeness5/5

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

For a destructive mutation with no output schema, the description covers effects on occurrences, the auth requirement, and the misuse risk. 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.

Parameters3/5

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

Schema coverage is 100%, so the schema fully documents seriesMasterId, account, and workspace. The description adds no parameter-specific syntax or format detail beyond the schema, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb ('Remove') and resource ('a series' custom prompt'), clearly distinct from sibling setters like hub_set_series_custom_prompt and from the call/event variants. An agent can identify the operation without opening the schema.

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

Usage Guidelines4/5

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

Provides an explicit anti-pattern ('Never clear a series prompt to avoid a conflict...') that steers correct usage, and clarifies the relationship with occurrence prompts. It lacks an explicit pointer to alternative tools (e.g., set, or clearing occurrence prompts), but the when-not guidance is unusually strong.

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

hub_count_callsA
Read-onlyIdempotent
Inspect

Return the total number of calls visible to the actor user. Use to plan pagination. Requires recordings:read scope.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4/5.0
Behavior4/5

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

Annotations already cover readOnly/idempotent/non-destructive, so the description's real contribution is the auth requirement ('Requires recordings:read scope') and the permission-scoped visibility of the count. Both are operationally useful and not derivable from annotations or schema. Return shape (bare integer vs envelope) is 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.

Conciseness5/5

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

Three short sentences, purpose first, usage second, prerequisite last. No filler and nothing repeated from the title or schema.

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

Completeness4/5

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

A simple zero-required-parameter read tool with full schema coverage and no output schema; the description says what is returned (a total) and what scope governs it. Slightly short on whether the count respects the workspace/account selection, but nothing blocking an agent from calling it correctly.

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

Parameters3/5

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

Schema coverage is 100% with rich per-parameter text for account and workspace, so the baseline is 3. The description adds nothing about how workspace scoping affects the returned total, which is the one genuinely non-obvious semantic here.

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

Purpose4/5

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

Specific verb+resource ('Return the total number of calls') with an explicit scope qualifier ('visible to the actor user'), which implicitly separates it from hub_list_calls and hub_count_search_calls. It never names those siblings outright, so the 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.

Usage Guidelines4/5

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

'Use to plan pagination' gives a concrete when-to-use condition, which is the main reason an agent would reach for a count endpoint. It stops short of explicit exclusions (e.g. 'do not use to count filtered results — use hub_count_search_calls') or prerequisite ordering.

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

hub_count_search_callsA
Read-onlyIdempotent
Inspect

Count of calls matching a search query. Pair with hub_search_calls for paginated UIs. Requires recordings:read scope.

NameRequiredDescriptionDefault
queryNoSearch text.
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), yet the description still adds a real operational prerequisite: 'Requires recordings:read scope.' That auth requirement is exactly the kind of context annotations don't carry. It omits whether the count is exact vs. capped for very large result sets.

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

Conciseness5/5

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

Three short sentences with no filler; the core purpose leads, the sibling pairing follows, and the auth prerequisite closes. 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.

Completeness3/5

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 says nothing about the shape of the result (raw integer? object with a count field?) or whether the count is bounded for large result sets. For a minimal tool with rich schema coverage this is adequate, but the return-value gap is real when 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.

Parameters3/5

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

Schema description coverage is 100%, including detailed account and workspace semantics, so parameter meaning is fully handled by the schema. The description only echoes 'search query' without adding format or matching-behavior detail, so baseline 3 applies.

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

Purpose4/5

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

States a specific verb ('Count') and resource ('calls matching a search query'), so the agent knows exactly what it returns. It implicitly separates itself from hub_search_calls by pointing at it as the paginated companion, but never explicitly contrasts with the sibling hub_count_calls (count of all calls), which an agent could easily confuse with this tool.

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

Usage Guidelines4/5

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

'Pair with `hub_search_calls` for paginated UIs' gives a concrete usage pattern and names the alternative tool to combine with. It stops short of when-not-to-use guidance (e.g., use hub_count_calls when you have no query filter), so the routing signal is clear but incomplete.

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

hub_delete_callA
Destructive
Inspect

Delete a call by ID. Hard-deletes both the UserCall metadata and the underlying recording media. NOT REVERSIBLE — use with care. Requires recordings:write scope.

NameRequiredDescriptionDefault
idYesUserCall ID.
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4.5/5.0
Behavior5/5

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

Although annotations already mark the tool as destructive, the description adds crucial details: both metadata and recording media are hard-deleted, the operation is NOT REVERSIBLE, and the recordings:write scope is required. This is exactly the behavioral context an agent needs before invoking a destructive tool.

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

Conciseness5/5

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

The description is four short sentences with zero waste. The destructive scope and irreversibility warning are front-loaded immediately after the core action.

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

Completeness5/5

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

Given the rich schema descriptions, destructive annotations, and absence of an output schema, the description supplies all the missing high-value context: what is deleted, that it is irreversible, and the required authorization scope.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already fully documents id, account, and workspace. The description only restates that deletion is by ID and adds no additional parameter-level meaning beyond the schema.

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

Purpose5/5

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

The description states a specific verb and resource: delete a call by ID. It also specifies that both UserCall metadata and the underlying recording media are hard-deleted, making the operation clearly distinct from read-oriented siblings such as hub_get_call.

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

Usage Guidelines4/5

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

The description gives a strong caution to use with care and states the required recordings:write scope. It does not explicitly compare this tool with alternative cleanup or mutation siblings, but the context for use is otherwise clear.

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

hub_get_audio_urlA
Read-onlyIdempotent
Inspect

Generate a short-lived signed URL to download the recording's audio (typically MP3 or WAV). The URL is valid for expiryMinutes minutes (default 30, max enforced by Hub). The agent should NOT cache the URL — request a fresh one each time the audio is needed. Requires recordings:read scope.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
recordingIdYesRecording ID.
expiryMinutesNoHow long the URL stays valid. Default 30.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description adds genuine behavioral context beyond that: the URL is short-lived, defaults to 30 minutes, the max is enforced server-side by Hub, and it must not be cached. It stops short of failure modes (e.g., what happens if the recording has no audio yet).

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

Conciseness5/5

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

Three tight sentences with no filler, front-loaded with the core action and followed by expiry semantics and the caching warning. Every sentence carries distinct information.

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

Completeness4/5

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

With no output schema and full parameter coverage, the description sufficiently explains what is returned (a signed download URL), its lifetime, and the auth requirement. The only notable omission is error/precondition behavior when audio is unavailable.

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

Parameters3/5

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

Schema coverage is 100%, so recordingId and expiryMinutes are already documented in the schema, and the description largely restates the 30-minute default. It only marginally adds value by noting the max expiry is enforced by Hub. Baseline 3 is appropriate when the schema does the heavy lifting.

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

Purpose4/5

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

States a specific verb and resource: generate a short-lived signed URL for a recording's audio, even noting typical formats (MP3/WAV). It is clear what the tool returns, but it never distinguishes itself from close siblings like hub_get_media_url or hub_get_preview_url, leaving the agent to infer which URL variant it wants.

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

Usage Guidelines3/5

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

It gives a clear operational directive (do not cache, request fresh each time) and states the required recordings:read scope, which is real usage guidance. However, it never says when to prefer this over the sibling URL tools (media/preview), so the alternatives question is left unanswered.

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

hub_get_callA
Read-onlyIdempotent
Inspect

Fetch a single call by ID. Returns the full UserCallDTO. Field map (the DTO is deeply nested):

  • top-level id (integer) — what /usercall/{id} expects, what list/search return

  • top-level clickupList/jiraProjectId/airtableBaseId/airtableTableId — populated when this call has been pushed to that vendor

  • top-level summaryApplied/actionItemsApplied/etc. (bool) — has the summary/etc. been pushed?

  • call.id (integer) — INTERNAL Zoom/Meet/Teams call id, NOT for /usercall/{id} paths

  • call.callUuid (string) — what hub_send_call_to_jira/clickup/airtable want as callUUID

  • call.attendees (string, often "") — NOT a structured array

  • call.recordings[i].id (integer) — recording id for /recording/{id}/audio-url etc.

  • call.recordings[i].summary/keyPoints/actionItems/enhancedNotes — markdown STRINGS, not arrays; the CALLER's own version (generated from their workspace prompt, per-call prompt, notes and note template), never another participant's

  • call.recordings[i].userNotes — only the caller's own desktop notes, null otherwise Requires recordings:read scope.

NameRequiredDescriptionDefault
idYesUserCall integer ID — the OUTER `id` from list/search/etc., NOT the inner `call.id`.
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4.5/5.0
Behavior5/5

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

The description adds substantial behavioral context beyond the annotations: it names the returned DTO, maps nested fields to their meanings and intended API use, clarifies that summary fields are markdown strings rather than arrays, notes that userNotes are caller-only, and states the required recordings:read scope. This is especially valuable 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.

Conciseness5/5

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

The description is front-loaded with the core action and then uses a structured field map for the nested DTO. Despite its length, every bullet earns its place because the return shape is complex and there is no output schema to document it.

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

Completeness5/5

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

Given the deeply nested UserCallDTO and the absence of an output schema, the description provides the field interpretation an agent needs to use the result correctly. It also covers the authorization scope, making the definition complete for this retrieval tool.

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

Parameters3/5

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

Schema description coverage is 100%, so the id, account, and workspace parameters are already documented in the schema. The description reinforces that the tool takes a call ID, but it does not add new parameter-level guidance beyond what the schema already provides; its detail is focused on returned fields.

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

Purpose5/5

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

The description opens with a specific verb and resource: fetching a single call by ID, returning the full UserCallDTO. It clearly distinguishes retrieval-by-ID from list/search siblings through the ID-based framing and provides a detailed field map of what will be returned.

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

Usage Guidelines4/5

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

It clearly establishes that this tool is used when retrieving one call by its ID and states the required recordings:read scope. It does not explicitly compare against alternatives like hub_search_calls or hub_list_calls, but the context is sufficiently clear for an agent to select the right tool when an ID is available.

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

hub_get_custom_promptA
Read-onlyIdempotent
Inspect

Get the workspace's custom prompt — house-style instructions that, together with each participant's own per-call prompt, notes and note template, form the instruction set their version of the summary, key points, action items and enhanced notes is generated from (task generation too). Returns { customPrompt: string | null }. Requires workspace-settings:read scope.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive and closed-world, so the safety profile is covered; the description adds genuinely useful non-schema context: the required workspace-settings:read scope and the fact that customPrompt may be null. It does not describe failure modes for insufficient scope, but the added auth and nullability detail clears the bar for annotations-present tools.

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

Conciseness4/5

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

Front-loaded with the verb and resource, and every clause carries information (instruction-set composition, return shape, scope requirement). The middle clause is long and parenthetical-heavy, making it denser than needed, but there is no filler.

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

Completeness5/5

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

There is no output schema, and the description compensates by declaring the exact return type including nullability. Combined with the auth scope and the explanation of how the value is consumed, 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.

Parameters3/5

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

Schema description coverage is 100% and both the account and workspace parameters are thoroughly documented in the schema, including multi-account fallback behavior and workspace override rules. The description adds nothing about parameters, which is acceptable here but caps it at the baseline.

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

Purpose5/5

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

States a specific verb and resource ("Get the workspace's custom prompt") and immediately defines what that resource is — house-style instructions feeding summary/key-point/action-item/enhanced-note generation. It also states the return shape, and the phrase "each participant's own per-call prompt" implicitly separates it from the per-call sibling tools.

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

Usage Guidelines3/5

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

The description gives solid context about what the value is and what consumes it, which implies when an agent would want it (inspecting house style before setting or reasoning about generated summaries). However, it never names an alternative explicitly or states a when-not condition versus hub_get_workspace, hub_set_custom_prompt, or find_my_workspace — usage must be inferred.

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

hub_get_default_workspaceA
Read-onlyIdempotent
Inspect

Get the user's "default workspace" — where new calendar events without an explicit assignment get routed. Returns { workspaceId: uuid | null }. Requires user-settings:read scope.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world, so the safety profile is covered. The description adds genuinely new context beyond them: the nullable return shape ({ workspaceId: uuid | null }) and the required user-settings:read scope, which tells the agent an auth precondition exists.

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

Conciseness5/5

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

Three compact clauses, front-loaded with the action and its meaning, then the return shape, then the scope requirement. No filler and nothing repeated from the schema.

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

Completeness4/5

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

With no output schema present, the description steps in to state the return shape and nullability, plus the auth scope — the two things an agent would otherwise have to guess. Minor gap: no guidance on the account/workspace parameters or what a null result means operationally.

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

Parameters3/5

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

Both parameters are optional and documented at 100% schema coverage, including the multi-account failure mode (ACCOUNT_REQUIRED) and workspace override semantics. The description adds nothing about them, but with full schema coverage the baseline of 3 applies.

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

Purpose4/5

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

A specific verb+resource ('Get the user's default workspace') with an added functional gloss explaining what the default workspace actually controls (routing of unassigned calendar events). It does not, however, distinguish itself from the nearby sibling find_my_workspace or from hub_get_workspace, which an agent could easily conflate.

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

Usage Guidelines3/5

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

Usage is implied through the routing explanation (call this when you need to know where unassigned events land), but there is no explicit when-to-use/when-not framing and no mention of the obvious alternative find_my_workspace or of the write counterpart hub_set_default_workspace.

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

hub_get_media_urlA
Read-onlyIdempotent
Inspect

Like hub_get_audio_url but returns the full media (video + audio) when the recording has a video track. Falls back to audio-only when there isn't one. Same expiry semantics. Requires recordings:read scope.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
recordingIdYesRecording ID.
expiryMinutesNoHow long the URL stays valid. Default 30.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover safety (readOnly, non-destructive, idempotent), and the description adds genuinely new behavior: automatic degradation to audio-only when no video track exists, shared expiry semantics with the audio tool, and the recordings:read authorization requirement. What it omits is the concrete return shape (e.g. whether the response includes an expiry timestamp alongside the URL).

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

Conciseness5/5

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

Three short sentences with no filler, led by the differentiation that matters most. Each sentence carries distinct information: what differs from the audio tool, the fallback, and the auth prerequisite.

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

Completeness4/5

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

For a URL-returning read with no output schema, the definition covers purpose, sibling choice, fallback behavior, expiry and scope. The remaining gap is return-value shape (URL field name, whether expiry is returned), which an agent would have to infer.

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

Parameters3/5

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

Schema description coverage is 100%, so account, workspace, recordingId and expiryMinutes are already documented in the schema. The description only gestures at expiry ('Same expiry semantics') without restating the parameter or its default, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource (get media URL) and explicitly anchors it to a named sibling, hub_get_audio_url, contrasting the two: this returns video+audio when a video track exists, audio-only otherwise. An agent can distinguish it from hub_get_audio_url and hub_get_preview_url without opening a schema.

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

Usage Guidelines4/5

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

The 'Like X but...' framing gives a clear selection rule: choose this over the audio-only tool when full media is wanted, with the fallback stated as automatic. It also names the required recordings:read scope. It does not spell out an explicit when-not case (e.g. when to prefer hub_get_audio_url instead), keeping it just short of a 5.

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

hub_get_preferred_integrationA
Read-onlyIdempotent
Inspect

Get the workspace's preferred integration target — which task system new actions are routed to by default (Jira, ClickUp, Airtable, PM, etc.). Requires workspace-settings:read scope.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered. The description adds genuine behavioral context beyond that: the explicit "Requires workspace-settings:read scope" auth requirement and the interpretation of the returned value as the default routing target.

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

Conciseness5/5

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

Two compact clauses: the core purpose is front-loaded, and the scope prerequisite follows as a short separate statement. Every sentence earns its place with no filler.

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

Completeness4/5

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

For a no-argument read with full schema coverage and read-only annotations, the description supplies everything needed to call it correctly: what it returns conceptually and what permission is required. Only the shape of the returned value (e.g., whether it includes an integration id versus just a name) is left implicit, which is minor given no output schema exists.

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

Parameters3/5

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

Schema description coverage is 100% and both parameters (account, workspace) carry detailed inline documentation, so the schema already does the heavy lifting. The description says nothing about how account or workspace selection interacts with this call, leaving it at the baseline.

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

Purpose5/5

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

The description uses a specific verb ("Get") on a specific resource ("workspace's preferred integration target") and immediately explains what that concept means: the task system new actions route to by default, with concrete examples (Jira, ClickUp, Airtable, PM). This clearly distinguishes it from the sibling hub_set_preferred_integration and from hub_list_integrations.

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

Usage Guidelines3/5

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

The read-only nature and the mentioned scope imply when the tool applies, but the description never states the condition for calling it versus alternatives — notably the setter sibling hub_set_preferred_integration or hub_list_integrations for enumerating available targets. Usage must be inferred from the name and the verb.

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

hub_get_preview_urlA
Read-onlyIdempotent
Inspect

Get a signed URL for the recording's preview thumbnail (a still image or short looping clip). Useful for embedding a card. Same expiry semantics. Requires recordings:read scope.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
recordingIdYesRecording ID.
expiryMinutesNoHow long the URL stays valid. Default 30.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations establish the safe read-only, idempotent profile. The description adds genuinely new context: the URL is signed, requires the recordings:read scope, and expires. That scope requirement in particular is not derivable from annotations or schema. It doesn't state the URL's eventual failure mode when expired, keeping it at 4.

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

Conciseness4/5

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

Three short sentences, front-loaded with the core action and asset type, no padding. 'Same expiry semantics' is a dangling reference that assumes the reader has just seen a sibling definition, a minor structural flaw.

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

Completeness4/5

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

With no output schema, the description does state the return value (a signed URL) and its auth scope, and all four parameters are schema-documented. An agent could call this correctly; only the expiry default and the expected error on an expired URL are left implicit.

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

Parameters3/5

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

Schema coverage is 100%, so recordingId, account, workspace and expiryMinutes are already documented in structured form. The phrase 'Same expiry semantics' gestures at expiryMinutes but adds no detail beyond the schema's 'Default 30', so baseline 3 is correct.

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

Purpose4/5

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

States a specific verb and resource ('Get a signed URL for the recording's preview thumbnail') and immediately clarifies what the asset is (still image or short looping clip). It implicitly differentiates from hub_get_audio_url and hub_get_media_url by naming the preview thumbnail, 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.

Usage Guidelines3/5

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

'Useful for embedding a card' gives one positive use case, which is more than nothing. But there is no explicit routing guidance to hub_get_media_url or hub_get_audio_url, and no statement of when this tool is not appropriate.

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

hub_get_recording_progressA
Read-onlyIdempotent
Inspect

Get the processing progress of a recording. Returns an integer 0-100 — useful for polling after a hub_reprocess_recording call. Requires recordings:read scope.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
recordingIdYesRecording ID (integer, from a call's recordingId field).

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description adds value beyond them: the concrete return shape (integer 0-100) and the required recordings:read scope. It omits edge behavior such as what is returned or raised if the recording id doesn't exist or has never been processed, 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.

Conciseness5/5

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

Three tight sentences: purpose first, return contract second, auth prerequisite last. No filler and nothing buried.

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

Completeness4/5

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

With no output schema, the description carries the return contract and does so (integer 0-100), and the one required parameter is schema-documented. A small gap remains around terminal states and error conditions, but an agent has enough to call this correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so account, workspace and recordingId are all documented at the schema level. The description adds nothing about parameters 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.

Purpose4/5

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

States a specific verb and resource ('Get the processing progress of a recording') and immediately pins down the returned value range 0-100, so an agent knows exactly what this yields. It does not explicitly distinguish itself from hub_get_call, which likely also exposes recording state, so sibling differentiation is only partial.

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

Usage Guidelines4/5

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

Gives a concrete usage context — polling after a hub_reprocess_recording call — which names the sibling it pairs with and the temporal ordering. It stops short of saying when not to use it (e.g., when the recording is already processed, or to use hub_get_call for full detail) or how often to poll.

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

hub_get_workspaceA
Read-onlyIdempotent
Inspect

Get details for the selected workspace (or the workspace bound to a workspace key) (the one this API key was provisioned for). Hub does not currently expose a single-workspace GET, so this returns the matching entry from the user's workspaces list. Requires workspaces:read scope.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/no-destructive, so the bar is lower, and the description adds real value: it discloses the "workspaces:read" scope requirement and the implementation caveat that no single-workspace GET exists so it filters the user's workspaces list. That caveat explains result semantics an agent would otherwise misread.

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

Conciseness4/5

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

The core action and scope requirement bookend the description efficiently. The stacked parenthetical about workspace keys is slightly hard to parse but does not waste sentences.

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

Completeness4/5

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

With no output schema, the description wisely tells the agent the return value is the matching entry from the workspaces list (so shape matches list_workspaces). Auth scope, selection semantics, and the sibling-driven discovery path are all covered; only an explicit pointer to hub_get_default_workspace is missing.

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

Parameters3/5

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

Schema coverage is 100%, so both account and workspace are fully documented in the input schema, including override and multi-account failure behavior. The description adds no syntax or selection detail beyond what the schema already provides, so baseline 3 applies.

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

Purpose4/5

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

States a specific verb+resource ("Get details for the selected workspace") and scopes it to either the selected workspace or the key-bound workspace. The note that it returns the matching entry from the user's workspaces list effectively distinguishes it from list_workspaces, though it never names a sibling directly.

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

Usage Guidelines3/5

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

Implies when to use it (you want details on the current/selected workspace) but gives no explicit when-not guidance or routing to hub_get_default_workspace or list_workspaces. The useful discovery hint ("discover candidates with list_workspaces") lives only in the parameter schema, not the description.

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

hub_lens_chatA
Destructive
Inspect

Run a Lens chat query against the workspace's knowledge (recordings, calls, transcripts, integrated SaaS data). Returns the synthesized answer as a string. Pass lastMessage (the new user turn) and optionally history (prior turns). For multi-turn conversations the agent SHOULD pass an accumulating history so Lens can resolve references like "the last call we discussed". Calls can take 15-30s on synthesis-heavy queries; the MCP timeout is generous to allow this. Requires lens:chat scope.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
historyNoPrior turns in chronological order (oldest first). Each entry is { user, datetime, content }. Optional but recommended for follow-up questions.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
lastMessageYesThe new user message to send to Lens. Required.

TDQS

A3.6/5.0
Behavior2/5

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

The description adds genuinely useful behavior facts beyond the annotations: 15-30s synthesis latency, a deliberately generous MCP timeout, and the required lens:chat scope. However, it describes a knowledge query that 'returns the synthesized answer as a string', which reads as a pure read, while annotations declare readOnlyHint=false and destructiveHint=true. The description never reconciles that mismatch, so an agent cannot tell why this call would be considered destructive or what state could change.

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

Conciseness4/5

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

Front-loaded with purpose and return value, then parameters, then operational caveats (latency, timeout, scope) — a sensible order with little waste. The sentence 'Pass `lastMessage` ... and optionally `history`' largely restates the required/optional schema and could be folded into the multi-turn guidance.

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

Completeness4/5

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

For a four-parameter, output-schema-less tool the description covers what is returned (a string), the multi-turn contract, latency, and auth scope, which is close to enough to invoke it correctly. The remaining hole is behavioral: nothing explains the destructive/non-idempotent annotations, leaving an unexplained safety profile on what appears to be a read-style query.

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

Parameters4/5

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

Schema coverage is 100%, so 3 is the baseline, and the description goes beyond it by framing `lastMessage` as 'the new user turn' and `history` as accumulating prior turns whose purpose is reference resolution. That is semantic value the schema's field-level docs do not convey, though the `account`/`workspace` auth semantics are left entirely to the schema.

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

Purpose4/5

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

States a specific verb and resource ('Run a Lens chat query against the workspace's knowledge') and lists the covered data sources (recordings, calls, transcripts, SaaS data), plus what it returns (a synthesized answer string). It implicitly separates itself from retrieval-style siblings like hub_search_calls, but never names an alternative, so the differentiation is inferential rather than explicit.

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

Usage Guidelines4/5

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

Gives clear invocation guidance: pass `lastMessage` as the new turn, pass `history` for follow-ups, and explicitly tells the agent it SHOULD accumulate history so Lens can resolve references like 'the last call we discussed'. What is missing is when NOT to use it — e.g. when to prefer hub_search_calls or hub_get_call over a synthesized chat answer.

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

hub_list_calendar_eventsA
Read-onlyIdempotent
Inspect

List the actor user's calendar events in a date range. Use this to find the eventId or seriesMasterId a prompt should attach to. Each event includes subject, start/end, whether a recording bot is subscribed, and any eventCustomPrompt / seriesCustomPrompt already set. Events belong to the user across all workspace assignments; workspace assignment is processing context, not ownership. Requires calendar:read scope.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
endDateYesISO-8601 end of range, e.g. 2026-09-30T00:00:00Z. Required.
startDateYesISO-8601 start of range, e.g. 2026-09-01T00:00:00Z. Required.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the burden is reduced; the description still adds real value by disclosing the required calendar:read scope and the ownership model ('events belong to the user across all workspace assignments'). It does not mention result caps or pagination, which is the main remaining gap.

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

Conciseness5/5

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

Four sentences, front-loaded with purpose, then usage, then return contents, then scope/auth. No filler, and the reader's most important question (what do I get back) is answered before the operational caveats.

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

Completeness5/5

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

There is no output schema, and the description compensates by enumerating the returned fields (subject, start/end, recording-bot subscription, event/series custom prompts). Combined with the ownership and auth notes, an agent has everything needed to call it correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds non-obvious semantics for `workspace`: it is processing context, not an ownership filter, so passing it will not narrow results. That clarification meaningfully changes how an agent uses the parameter.

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

Purpose5/5

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

States a specific verb, resource, and scope: 'List the actor user's calendar events in a date range.' It is unmistakably distinct from the hub_list_calls / hub_search_calls siblings that operate on calls rather than calendar events.

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

Usage Guidelines4/5

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

'Use this to find the eventId or seriesMasterId a prompt should attach to' gives a concrete selection context that routes the agent toward the hub_set_event_custom_prompt / hub_set_series_custom_prompt family. It stops short of naming an explicit alternative or a when-not-to-use case, so it falls just below the top band.

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

hub_list_callsA
Read-onlyIdempotent
Inspect

Page through all calls the actor user can see (their own + any explicitly shared). Returns a list of UserCallDTO. Pagination is page+size; sort order is most-recent first. Requires recordings:read scope.

NameRequiredDescriptionDefault
pageNo0-based page index.
sizeNoPage size (backend default ~20, cap typically 100).
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so credit goes to what the text adds: the visibility model (own + explicitly shared), sort order (most-recent first), pagination style, and the required recordings:read scope. That is real authorization and result-shape 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.

Conciseness5/5

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

Three short sentences, all front-loaded: scope first, return type second, pagination/sort/auth third. No filler and nothing structural is missing.

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

Completeness4/5

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

For a read/list tool with full annotation and schema coverage, this covers visibility scope, pagination, ordering and required scope. The only gap is that 'UserCallDTO' is referenced without saying what fields matter to a calling agent.

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

Parameters3/5

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

Schema coverage is 100%, so page, size, account and workspace are fully documented in the schema. The description only restates 'pagination is page+size' and adds nothing about the account/workspace selection parameters. Baseline 3 applies.

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

Purpose4/5

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

Specific verb + resource + visibility scope: 'Page through all calls the actor user can see (their own + any explicitly shared)'. An agent can distinguish this list-all tool from hub_search_calls conceptually, 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.

Usage Guidelines3/5

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

Usage is implied by 'all calls ... can see' (unfiltered listing) versus the search siblings, but the description never states when to prefer hub_search_calls, hub_count_calls, or hub_get_call, nor any exclusions. Guidance must be inferred.

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

hub_list_integrationsA
Read-onlyIdempotent
Inspect

List all integrations connected to the selected workspace (or the workspace bound to a workspace key). Returns one entry per connected toolkit (Slack, Jira, ClickUp, Airtable, Notion, Gmail, GCal, GitHub, etc.) with system name, connection status, last sync time, and any vendor metadata. Useful for choosing which setPreferredIntegration value is valid, or for reporting connection health to the user. Requires integrations:read scope.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered; the description adds the auth scope requirement and the per-toolkit result granularity, which an agent cannot infer from the schema. It doesn't mention ordering, pagination, or what an empty result means, so it falls short of a 5.

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

Conciseness5/5

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

Three sentences, front-loaded with the operation, then the return contents, then the purpose and the auth prerequisite. Every clause carries information; no filler or restatement of the name.

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

Completeness4/5

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

With no output schema, the description correctly compensates by enumerating the returned fields, and it names the required scope. Minor gap: nothing about ordering, result limits, or behavior when no integrations are connected for a read-only list of unbounded size.

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

Parameters3/5

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

Schema coverage is 100%, so both parameters are already documented, and the description only loosely reinforces `workspace` ('the selected workspace, or the workspace bound to a workspace key'). The `account` parameter is never addressed in the description. Baseline 3 applies when the schema does the heavy lifting.

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

Purpose5/5

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

States a specific verb and resource ('List all integrations connected to the selected workspace') plus the exact return shape: one entry per connected toolkit with system name, status, last sync time, and vendor metadata. This is clearly distinguishable from hub_get_preferred_integration/hub_set_preferred_integration 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.

Usage Guidelines4/5

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

Gives concrete use cases: discovering which value is valid for `setPreferredIntegration`, and reporting connection health to the user. It also states the required `integrations:read` scope. What's missing is an explicit exclusion (i.e. 'use hub_get_preferred_integration when you only need the single active one'), which would make routing unambiguous.

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

hub_list_membersA
Read-onlyIdempotent
Inspect

List all members of the selected workspace (or the workspace bound to a workspace key). Each entry includes user UUID, email, name, role, and join timestamp. Useful for "tag this person", "summarize who said what in the last call", etc. Requires members:read scope.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world, so the safety profile is covered. The description adds real value beyond them: the members:read scope requirement, how the workspace is resolved (configured workspace vs. workspace-key binding), and the shape of each returned entry.

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

Conciseness4/5

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

Three short sentences, front-loaded with the core action and scope, with the field list and scope requirement following. The quoted example phrasings are slightly informal but earn their place as usage cues.

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

Completeness4/5

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

With no output schema, the description compensates by enumerating the returned fields (UUID, email, name, role, join timestamp) and stating the auth scope. It is complete enough to invoke correctly; only return-volume/pagination behavior is unaddressed.

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

Parameters3/5

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

Schema coverage is 100% and both parameters are richly documented in the schema, so the baseline is 3. The description's note about the selected workspace vs. workspace-key binding marginally reinforces the workspace param but says nothing about the account parameter or its ACCOUNT_REQUIRED failure mode.

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

Purpose5/5

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

States a specific verb and resource ("List all members") plus the exact scope (selected workspace or workspace bound to a key), and enumerates the returned fields. This is clearly distinguishable from sibling listing tools such as pm_list_workspace_members or hub_get_workspace.

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

Usage Guidelines4/5

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

Gives concrete usage contexts ("tag this person", "summarize who said what in the last call") and states the required members:read scope, which is a real gating condition. It does not name an alternative tool or say when not to use it, 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.

hub_regenerate_summaryA
Destructive
Inspect

Re-run the analysis for the CALLER's own version of the summary, key points, action items and (when they have notes) enhanced notes, against the existing transcript and using their CURRENT instruction set (workspace prompt, per-call prompt, notes and note template). Other participants' versions are never touched. Cheaper than hub_reprocess_recording. Returns the new summary text. Requires recordings:write scope.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
saveToDbNoDefault true. When false, returns the new summary without persisting it (preview mode).
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
recordingIdYesRecording ID.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and openWorldHint=true; the description adds real value on top by bounding the blast radius ('other participants' versions are never touched'), naming the write scope required ('Requires recordings:write scope'), and disclosing what inputs drive the regeneration (current workspace prompt, per-call prompt, notes, note template). A small gap: it never says outright that the caller's existing summary is replaced/overwritten by the new one.

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

Conciseness4/5

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

Front-loaded with the core action and scope, and each clause carries information (scope, inputs, cost comparison, return value, auth). Dense parenthetical enumerations ('workspace prompt, per-call prompt, notes and note template') make it slightly heavy, but nothing is filler.

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

Completeness4/5

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

For a 4-parameter mutation with no output schema, the description covers the essentials: it states the return value ('the new summary text'), the required scope, and the isolation guarantee. It does not address whether regeneration is synchronous/long-running or what happens on failure, which would matter for a reprocessing call.

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

Parameters3/5

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

Schema description coverage is 100%, so account/workspace/saveToDb/recordingId are all documented structurally; baseline 3 applies. The description adds behavioral rather than parameter-level meaning — it explains which instruction sources feed the run, but says nothing about saveToDb preview behavior or workspace selection that the schema doesn't already cover.

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

Purpose5/5

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

Specific verb ('Re-run the analysis') and precisely scoped resource ('the CALLER's own version of the summary, key points, action items, enhanced notes'), with the negative scope stated explicitly ('Other participants' versions are never touched'). It is also unambiguously distinguished from the closest sibling, hub_reprocess_recording.

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

Usage Guidelines4/5

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

Explicitly positions itself against the alternative by stating it is 'Cheaper than hub_reprocess_recording', and clarifies the scope condition (caller's own version only, enhanced notes only when notes exist). It stops short of stating the inverse condition — when an agent should choose hub_reprocess_recording instead (e.g., to touch other participants' versions).

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

hub_reprocess_recordingA
Destructive
Inspect

Re-run the FULL pipeline on a recording: transcription + summary + key points + action items. Slower and more expensive than hub_regenerate_summary. Use when a fresh transcription would meaningfully improve the result (different language detection, speaker diarization fix, etc.). Returns the updated recording DTO. Requires recordings:write scope.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
regenerateNoWhether to regenerate downstream artifacts (key points, action items) after the new transcription. Default true on the backend.
recordingIdYesRecording ID.

TDQS

A4.5/5.0
Behavior4/5

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

Adds valuable context beyond the annotations: cost/latency tradeoff, the recordings:write scope requirement, and that it returns an updated recording DTO. Annotations already declare destructiveHint=true and idempotentHint=false, but the description does not explicitly warn that the prior transcription and derived artifacts are replaced — a meaningful gap for a destructive re-run.

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

Conciseness5/5

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

Four tight sentences, front-loading what the tool does and immediately routing to the alternative. Every sentence carries distinct information (scope, cost, selection criteria, return/scope requirements) with no filler.

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

Completeness5/5

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

No output schema exists, but the description states it returns the updated recording DTO plus the required scope. For a 4-parameter mutation with full schema coverage and rich annotations, 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.

Parameters3/5

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

Schema description coverage is 100%, so `account`, `workspace`, `regenerate`, and `recordingId` are already fully documented, which sets the baseline at 3. The description implies the pipeline stages affected but adds no syntax or format detail beyond the schema.

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

Purpose5/5

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

States a specific verb (re-run) and the exact resource scope (FULL pipeline: transcription + summary + key points + action items) on a recording. It explicitly contrasts with the sibling `hub_regenerate_summary`, so an agent can distinguish them without opening either schema.

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

Usage Guidelines5/5

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

Names the cheaper alternative (`hub_regenerate_summary`) and gives the precise condition for choosing this tool instead: when a fresh transcription would meaningfully improve results, with concrete triggers (language detection, diarization fixes). This is explicit 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.

hub_search_callsA
Read-onlyIdempotent
Inspect

Free-text search across call name, description, attendees, and recording transcript content. Returns paginated UserCallDTO results. Requires recordings:read scope.

NameRequiredDescriptionDefault
pageNo0-based page index.
sizeNoPage size.
queryNoSearch text. Empty string lists all.
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description adds genuinely new context: the required recordings:read scope and that results are paginated. It does not mention rate limits or whether transcript matching is slower, but for a read tool this is solid added value.

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

Conciseness5/5

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

Three short sentences, front-loaded with what is searched followed by return shape and auth prerequisite. No filler and nothing repeated from the schema.

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

Completeness4/5

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

With no output schema, naming UserCallDTO and pagination is a reasonable signal of the return shape, and the auth requirement is stated. Minor gaps remain around result ordering and whether transcript search is best-effort, but 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.

Parameters3/5

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

Schema coverage is 100%, so page, size, query, account, and workspace are already fully documented in the schema. The description adds only that the query matches transcript content, which mildly clarifies query semantics but nothing about paging or multi-account behavior beyond the schema.

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

Purpose4/5

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

States a specific verb (free-text search) and resource (calls), and enumerates the searched fields (name, description, attendees, transcript) plus the return type. It does not explicitly distinguish itself from hub_list_calls or hub_count_search_calls, so an agent must infer the difference from the word 'search'.

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

Usage Guidelines3/5

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

Usage is only implied: 'free-text search' suggests use when you have keywords, and the schema note 'Empty string lists all' hints at the list-like fallback. There is no explicit when-to-use or when-not, and no routing to hub_list_calls or hub_count_search_calls for the count-only or unfiltered cases.

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

hub_send_call_to_airtableA
Destructive
Inspect

Push a call's extracted tasks into Airtable rows under one base + one or more tables. Requires recordings:write scope AND an Airtable integration on the workspace. Same return-shape caveat as hub_send_call_to_jira — boolean response = "request accepted", not "actually pushed".

NameRequiredDescriptionDefault
baseIdYesAirtable base id.
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
callUUIDYesCall's UUID — NESTED at hub_get_call.call.callUuid.
tableIdsYesOne or more Airtable table ids within the base.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already flag destructive=true, non-idempotent and open-world, so the safety profile is covered. The description adds materially beyond that: the auth/scope requirement and the crucial caveat that a boolean response means 'request accepted', not 'actually pushed' — a behavior an agent would otherwise misread as success. It doesn't explain why it's destructive (e.g. row creation vs overwrite) or what happens on repeated pushes despite idempotent=false.

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

Conciseness5/5

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

Three tight sentences: action first, prerequisites second, return-shape caveat last. Every sentence carries distinct information and nothing is padded.

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

Completeness4/5

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

With no output schema, the description does the important work of explaining what the return value does and does not mean. For a destructive, non-idempotent write tool it could still say more about duplicate pushes or failure modes, but an agent has enough to call it correctly and interpret the result.

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

Parameters3/5

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

Schema coverage is 100%, so baseId, tableIds, callUUID, account and workspace are all documented in the schema itself. The description only restates the cardinality constraint ('one base + one or more tables'), adding marginal value. Baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb ('Push') plus the exact resource and shape ('a call's extracted tasks into Airtable rows under one base + one or more tables'). The Airtable target distinguishes it cleanly from hub_send_call_to_jira and hub_send_call_to_clickup 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.

Usage Guidelines4/5

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

Gives concrete prerequisites (recordings:write scope AND a workspace Airtable integration), which is real selection guidance for a connector tool. It stops short of an explicit 'use this when the user wants Airtable rather than Jira/ClickUp' statement, so there's a small gap versus a 5.

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

hub_send_call_to_clickupA
Destructive
Inspect

Push a call's extracted tasks into a ClickUp list. Requires recordings:write scope AND a ClickUp integration on the workspace. Same return-shape caveat as hub_send_call_to_jira — boolean response = "request accepted", not "actually pushed".

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
callUUIDYesCall's UUID — NESTED at hub_get_call.call.callUuid.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
selectedListIdYesClickUp list id.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare destructive=true, idempotent=false and openWorld=true; the description adds real value on top by disclosing the misleading boolean return ("request accepted", not "actually pushed") and the auth/scope requirement. It stops short of warning that re-invoking creates duplicates despite non-idempotency, which is the main operational risk.

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

Conciseness4/5

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

Three short sentences, front-loaded with the action, then preconditions, then the return caveat. Slightly weakened by making the key caveat a cross-reference that only makes sense if the Jira tool's description was read.

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

Completeness3/5

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

With no output schema, the description partially compensates by characterizing the response as a boolean acceptance. But for a destructive, non-idempotent push it omits duplicate-creation behavior on retry and what fields/tasks get transferred, leaving meaningful gaps for the calling agent.

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

Parameters3/5

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

Schema coverage is 100%, including nested-location hints (`hub_get_call.call.callUuid`) and account/workspace semantics, so the schema carries the parameter burden. The description adds nothing parameter-specific — notably it does not say how to obtain a valid `selectedListId` (e.g., via list_spaces/list_boards).

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

Purpose5/5

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

States a specific verb and resource ('Push a call's extracted tasks into a ClickUp list') and implicitly distinguishes itself from the sibling send targets (Airtable, Jira) by naming the destination. The explicit reference to `hub_send_call_to_jira` further anchors it within its tool family.

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

Usage Guidelines4/5

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

Gives concrete preconditions — requires `recordings:write` scope and a ClickUp integration on the workspace — which is more than most siblings offer. It does not, however, state when to prefer this over the Airtable/Jira variants or what to do if the integration is missing.

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

hub_send_call_to_jiraA
Destructive
Inspect

Push a call's extracted tasks into one or more Jira projects under the same cloud. Hub fans the action items out across the listed projects. Requires recordings:write scope AND a Jira integration on the workspace (see hub_list_integrations). IMPORTANT: returns boolean — true means Hub ACCEPTED the request, NOT that it actually landed in Jira. The vendor push happens async and silently fails on bad cloudId/project/expired tokens. To confirm landing, call hub_get_call again and check that jiraProjectId is populated.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
cloudIdYesJira cloud id (from connected integration).
callUUIDYesCall's UUID — NESTED at hub_get_call.call.callUuid (NOT top-level hub_get_call.uuid). The DTO has two integer ids and one UUID; this is the UUID, not either of the integers.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
projectIdsYesOne or more Jira project ids within the cloud.

TDQS

A4.5/5.0
Behavior5/5

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

Goes well beyond the annotations by disclosing that the vendor push is async, that true only means Hub ACCEPTED the request, that bad cloudId/project/expired tokens fail silently, and how to confirm actual landing. This directly addresses the high-risk behaviors annotations cannot express for an openWorld, non-idempotent write.

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

Conciseness5/5

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

Front-loaded with the action, then requirements, then the critical boolean-semantics warning last. Every sentence carries actionable information with no filler.

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

Completeness5/5

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

With no output schema, the description crucially fills in the return-value semantics (boolean = accepted, not landed) and the async silent-failure risk. Combined with prerequisites and verification steps, an agent has everything needed to call and validate it correctly.

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

Parameters3/5

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

Schema description coverage is 100% and the schema is detailed, so the baseline is 3. The description adds one useful constraint — that all projectIds must be under the same cloudId and are fanned out — but otherwise defers to the schema for parameter meaning.

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

Purpose5/5

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

The description states a specific verb and resource: push a call's extracted tasks into one or more Jira projects under the same cloud. The destination (Jira) cleanly distinguishes it from hub_send_call_to_airtable and hub_send_call_to_clickup without opening either schema.

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

Usage Guidelines4/5

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

It names the prerequisites (recordings:write scope AND a Jira integration) and points to hub_list_integrations to satisfy them, plus explains how to verify landing via hub_get_call. It doesn't explicitly say when not to use it versus the airtable/clickup siblings, but the destination makes the choice self-evident.

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

hub_set_call_custom_promptA
Destructive
Inspect

Set the custom prompt on an already-recorded call, by its integer call id. This is the right tool for meetings that never had a calendar event (ad-hoc desktop or bot recordings), and for re-analysing a call differently. It is the CALLER's own prompt: it shapes only their version of the summary, key points, action items and enhanced notes. Stored only — follow it with hub_regenerate_summary to rebuild that version. Requires recordings:write scope.

NameRequiredDescriptionDefault
idYesUserCall id (integer), from hub_list_calls.
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
customPromptYesInstructions for the AI when it analyses this call.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only flag the write/destructive nature; the description adds genuinely non-obvious behavior: the write is stored but does not itself re-analyse, the prompt is caller-scoped and affects only that user's summary/key points/action items/notes, and the call needs recordings:write scope. Those facts are not derivable from 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.

Conciseness5/5

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

Four short sentences, front-loaded with the action and identifier, then the differentiating scenario, then the effect scope, then the follow-up and auth requirement. No sentence is filler.

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

Completeness4/5

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

Covers purpose, scoping, follow-up and required scope for a mutation tool with no output schema. It stops short of stating what happens when a custom prompt already exists (overwrite vs. error) despite destructiveHint=true, which is the one behavioral detail an agent would still want.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, and the description adds real meaning by explaining what customPrompt actually controls (the caller's own summary, key points, action items, enhanced notes) and that id is an integer UserCall id. It does not add anything about the account/workspace scoping parameters, which the schema already handles.

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

Purpose5/5

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

States a specific verb and resource ("Set the custom prompt on an already-recorded call") with the identifier type. It also carves out the sibling boundary by naming the exact scenario (ad-hoc desktop/bot recordings without calendar events) that separates it from hub_set_event_custom_prompt and hub_set_series_custom_prompt.

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

Usage Guidelines5/5

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

Gives concrete use cases (meetings with no calendar event, re-analysing a call differently) and states the required follow-up step: "Stored only — follow it with hub_regenerate_summary to rebuild that version." An agent knows both when to reach for this and what to do next without inferring from sibling names.

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

hub_set_custom_promptA
Destructive
Inspect

Update the workspace's custom prompt. Pass null or empty string to clear it. Takes effect on the next recording processed, or on hub_regenerate_summary for an existing one; existing recordings are not re-analysed automatically. Requires workspace-settings:write scope.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
customPromptYesNew prompt text. Pass null to remove the workspace prompt entirely.

TDQS

A4.3/5.0
Behavior4/5

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

Beyond the destructive/open-world annotations, the description adds useful behavior: passing null or empty clears the prompt, the change only affects the next processed recording, and existing recordings are not re-analysed automatically. It also names the required write scope.

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

Conciseness5/5

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

Three sentences, front-loaded with the core action and packed with timing, clearing, and scope details. There is no wasted language.

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

Completeness5/5

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

For a mutation tool with rich annotations and fully described parameters, the description covers the important gaps: how to clear, when the change applies, and the required permission. No output schema is needed for this setting update.

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

Parameters3/5

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

Schema description coverage is 100%, so account, workspace, and customPrompt are already well documented. The description adds that an empty string also clears the prompt, but otherwise relies on the schema for parameter meaning.

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

Purpose5/5

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

The description states a specific verb and resource: update the workspace's custom prompt. The word 'workspace's' distinguishes this from the sibling call-, event-, and series-level custom prompt setters.

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

Usage Guidelines4/5

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

It explains when the change takes effect and points to hub_regenerate_summary for existing recordings, giving a clear alternative for that case. It does not explicitly compare against the call/event/series custom prompt tools, but the workspace scope is clearly stated.

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

hub_set_default_workspaceA
Destructive
Inspect

Set the user's "default workspace" to the workspace this API key is bound to (future calendar events without an explicit workspace will route here). To clear the default entirely, pass { clear: true }. The MCP fills the workspace UUID from the selected workspace (or the workspace bound to a workspace key) automatically — agents do not need to (and cannot) target a different workspace from this key. Requires user-settings:write scope.

NameRequiredDescriptionDefault
clearNoWhen true, sets the default to null (no default workspace). Default: false.
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover destructive/openWorld/non-idempotent, but the description adds substantial context beyond them: what the default actually controls, that the MCP auto-fills the UUID, that a different workspace cannot be targeted, and the required user-settings:write scope. It stops short of saying the previous default is overwritten, which is the main thing destructiveHint=true implies.

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

Conciseness5/5

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

Three tight sentences: the action and its effect first, the clearing escape hatch second, the auto-fill constraint third, with the scope requirement last. No sentence is redundant and nothing important is buried.

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

Completeness5/5

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

For a 3-parameter, zero-required mutation with no output schema, the description covers effect, alternatives, constraints and auth scope. There is no return value to document and no meaningful gap an agent would need filled before calling.

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

Parameters4/5

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

Schema coverage is 100%, so baseline would be 3, but the description earns extra credit by clarifying semantics the schema cannot: the workspace UUID is filled automatically and cannot be aimed at another workspace from this key, so the 'workspace' parameter is effectively informational. It also explains the clear flag's effect in business terms.

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

Purpose5/5

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

The description opens with a specific verb and resource ("Set the user's 'default workspace'") and immediately states the observable consequence (future calendar events without an explicit workspace route there). That distinguishes it cleanly from hub_get_default_workspace and the other hub_set_* tools without needing the schema.

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

Usage Guidelines4/5

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

It gives a clear when-to-use condition (routing future calendar events) and an explicit alternative path for the opposite intent ("To clear the default entirely, pass { clear: true }"). It also states a hard constraint (agents cannot target a different workspace from this key). What's missing is a pointer to hub_get_default_workspace for reading the current value or to list_workspaces for discovery.

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

hub_set_event_custom_promptA
Destructive
Inspect

Set the custom prompt for ONE calendar occurrence. For a series occurrence it is applied TOGETHER with the series prompt (and the workspace prompt), not instead of them; for a one-off meeting it is the meeting's only per-call prompt. Takes effect the next time that meeting is processed. Requires recordings:write scope.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
eventIdYesEvent id from hub_list_calendar_events.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
customPromptYesInstructions for the AI when it analyses this meeting.

TDQS

A4.2/5.0
Behavior4/5

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

Goes beyond the annotations by disclosing that the change is deferred ('takes effect the next time that meeting is processed') and that recordings:write scope is required — neither is derivable from destructiveHint/openWorldHint. It does not say whether an existing per-event prompt is overwritten or how to revert, 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.

Conciseness5/5

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

Three short sentences, scope constraint front-loaded in the first, with no filler. Every clause (composition, timing, auth scope) conveys callable information.

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

Completeness4/5

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

Covers the essentials for a mutation tool: what it targets, how it composes with existing prompts, when it takes effect, and the auth scope. The only gap is overwrite/clear behavior, which is partly covered by the sibling hub_clear_event_custom_prompt.

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

Parameters3/5

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

Schema description coverage is 100%, so account, eventId, workspace and customPrompt are already documented in the schema. The description adds only the implicit 'one occurrence' framing for eventId; baseline 3 applies 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.

Purpose5/5

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

States a specific verb and resource ('Set the custom prompt for ONE calendar occurrence') and immediately scopes it against the series-level and workspace-level prompts, so an agent can distinguish it from hub_set_series_custom_prompt and hub_set_custom_prompt without opening schemas.

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

Usage Guidelines4/5

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

Explains the composition semantics for a series occurrence versus a one-off meeting, which tells the agent when this tool is the correct or only target. It stops short of explicitly naming the sibling alternatives (series/workspace/clear-event tools) or stating how to remove a prompt, 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.

hub_set_preferred_integrationA
Destructive
Inspect

Set the workspace's preferred integration target. The value should be the integration system name returned by hub_list_integrations (e.g. "JIRA", "CLICKUP", "AIRTABLE", "PM"). Requires workspace-settings:write scope.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
preferredIntegrationYesIntegrationSystem name as returned by hub_list_integrations.

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true, idempotentHint=false and openWorldHint=true; the description usefully adds the auth scope requirement. However, for a tool flagged destructive it does not disclose what the write replaces — whether the prior preference is overwritten, whether the change is workspace-wide for all members, or what happens on an invalid integration name.

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

Conciseness5/5

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

Two sentences, front-loaded with the action, then the value source and auth requirement. No filler and nothing buried.

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

Completeness3/5

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

Covers purpose, valid value source and permissions, which is the core an agent needs. It omits the mutating side effects implied by destructiveHint=true and any error behavior for unrecognized integration names, which matters for a write tool with no output schema.

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

Parameters3/5

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

Schema coverage is 100%, so all three parameters are already documented in the schema, including the same 'as returned by hub_list_integrations' note for preferredIntegration. The description adds only concrete example values (JIRA, CLICKUP, AIRTABLE, PM), which is marginal added value over the schema — baseline 3.

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

Purpose4/5

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

States a specific verb and resource: 'Set the workspace's preferred integration target.' The complement relationship with hub_get_preferred_integration and hub_list_integrations is inferable from the verb and the cross-reference, though neither sibling is named explicitly as an alternative.

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

Usage Guidelines4/5

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

Gives clear preconditions: the value must come from hub_list_integrations and the caller needs workspace-settings:write scope. It does not state when-not to use it (e.g. single-integration or read-only contexts), 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.

hub_set_series_custom_promptA
Destructive
Inspect

Set the custom prompt for an entire recurring series. Applies to every occurrence, IN ADDITION to any occurrence-specific prompt set with hub_set_event_custom_prompt (both are applied when both are set). Requires recordings:write scope.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
workspaceIdNoOptional. Only used when the series has no stored row yet and one must be created. Personal keys may choose a workspace they belong to that permits the key. Workspace keys may choose only the key's workspace or the owner's default. Omit it to use the key's selected or bound workspace.
customPromptYesInstructions for the AI when it analyses meetings in this series.
seriesMasterIdYesSeries master id from hub_list_calendar_events.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the mutation profile is covered. The description adds genuinely new behavioral context: the prompt is applied additively alongside event-specific prompts, and the call requires recordings:write scope. It does not state that an existing series prompt is overwritten or point to hub_clear_series_custom_prompt for removal, which is a gap given the destructive hint.

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

Conciseness5/5

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

Two tight sentences, front-loaded with the action and scope, followed by the layering rule and the auth requirement. No filler.

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

Completeness4/5

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

With no output schema and a fully documented parameter schema, the description covers the essential semantics: what changes, at what granularity, and how it interacts with the sibling tool. Missing only the overwrite/clear behavior for an existing series prompt.

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

Parameters3/5

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

Schema description coverage is 100%, so all five parameters including the auth/workspace context are documented in the schema. The description adds no parameter-level detail beyond the series-wide semantics, so the baseline 3 applies.

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

Purpose5/5

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

Specific verb+resource ('Set the custom prompt for an entire recurring series') with explicit scope ('entire recurring series', 'every occurrence'). It clearly differentiates from the sibling hub_set_event_custom_prompt by naming it and describing the layering relationship.

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

Usage Guidelines4/5

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

Explains the semantic context in which this tool applies (series-wide, applied to every occurrence, cumulative with event-level prompts) and names the alternative sibling. It stops short of stating when an agent should prefer series-level over occurrence-level prompting, but the layering explanation makes the distinction inferable.

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

list_accountsA
Read-onlyIdempotent
Inspect

List the accounts configured for this MCP session. Returns one entry per account with name (the label the caller passes as the account tool argument) and workspace (the workspace identifier or name declared for that account). API keys are not returned. In single-account mode (X-API-Key with optional X-Dutify-Workspace), returns a single entry with name="default". In multi-account mode (X-Dutify-Accounts header), returns every configured account. Call this first when you do not know which account names are available.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds real behavioral context beyond that: API keys are never returned, output varies by auth mode (X-API-Key vs X-Dutify-Accounts), and single-account mode yields a 'default' entry. It stops short of documenting pagination or error behavior, so a 4.

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

Conciseness5/5

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

Front-loaded with purpose and return shape, then mode behavior, then the usage trigger. Every sentence adds information; nothing is redundant padding.

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

Completeness5/5

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

There is no output schema, and the description fully compensates by describing the returned entries and field meanings. It also resolves the auth-mode ambiguity that would otherwise block correct interpretation of results. Nothing an agent needs to call and interpret this tool is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already fully documents both `account` and `workspace` at a high level. The description adds the useful linkage that the returned `name` is the value passed as the `account` argument, but it adds nothing further about the parameters themselves. Baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb and resource ('List the accounts configured for this MCP session') and immediately defines the return shape (one entry per account with `name` and `workspace`). It also distinguishes itself from the workspace-oriented siblings by clarifying what `name` and `workspace` mean, so an agent can tell it apart from list_workspaces/find_my_workspace.

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

Usage Guidelines4/5

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

Explicitly says 'Call this first when you do not know which account names are available', giving a clear trigger condition. It also explains the single-account vs multi-account mode split that determines output. It does not name an alternative tool or state exclusions (e.g. 'not for listing workspaces'), so not a full 5.

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

list_boardsA
Read-onlyIdempotent
Inspect

List feature-request boards the caller can view in the current workspace. Each entry includes the board slug and the short-ID prefixes (featureRequestKey, bugReportKey) needed to address requests/bugs in follow-up tool calls.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4/5.0
Behavior4/5

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

Annotations already establish read-only, idempotent, non-destructive behavior. The description adds useful context beyond annotations by saying only boards the caller can view are returned and by naming the key fields included in each entry.

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

Conciseness5/5

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

The description is two sentences with no wasted wording. The core purpose is front-loaded, followed by the relevant return-value detail.

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

Completeness4/5

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

For a simple list tool with rich annotations and complete parameter schema descriptions, the description covers purpose, scope, and the important fields returned. It does not mention pagination or exhaustively describe the returned board object, but it is sufficient for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so the account and workspace parameters are fully documented in the schema. The description does not add parameter-specific meaning beyond referring to the current workspace, 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.

Purpose4/5

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

The description gives a specific verb and resource: list feature-request boards the caller can view in the current workspace. It is clearly distinguishable from sibling fr_* tools and from list_workspaces/list_spaces by resource, though it does not explicitly name an alternative tool.

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

Usage Guidelines4/5

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

It implies when to use the tool by explaining that the board slug and short-ID prefixes are needed to address requests/bugs in follow-up tool calls. It lacks explicit when-not guidance or named alternatives, but the usage context is clear.

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

list_spacesA
Read-onlyIdempotent
Inspect

List wiki spaces the caller can view in the current workspace, each with a page count. Use the key field as the space identifier in follow-up wiki tool calls.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile needs no restating. The description does add permission-based scoping ("the caller can view") and confirms page counts are returned, but says nothing about pagination, result limits, or ordering for a list call.

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

Conciseness5/5

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

Two sentences, zero filler: the enumeration scope is front-loaded and the identifier hint follows. Nothing could be removed without losing information.

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

Completeness4/5

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

There is no output schema, and the description usefully compensates by stating that each entry carries a page count and a `key` field suitable for follow-up calls. Pagination and volume characteristics are the remaining gap for a list tool, but overall it is sufficient to call correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so both `account` and `workspace` are fully documented in the schema itself (including the ACCOUNT_REQUIRED failure mode). The description mentions "current workspace" only obliquely and adds no meaning beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ("List wiki spaces") plus a scope constraint ("the caller can view in the current workspace") and the shape of each item (page count). It implicitly separates itself from wiki_get_space / wiki_get_space_with_pages by being the enumeration call, but 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.

Usage Guidelines3/5

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

The second sentence gives useful downstream guidance (use `key` as the space identifier in follow-up wiki calls), but that is guidance about using the output, not about when to pick this tool over wiki_get_space or wiki_list_pages. No explicit when-not or prerequisite conditions are stated.

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

list_workspacesB
Read-onlyIdempotent
Inspect

Unified Dutify list_workspaces: fresh credential/workspace discovery. Does not require a selected workspace or reserve quota.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered. The description adds a genuinely useful behavioral note — no workspace selection needed and no quota reserved — but says nothing about response shape, ordering, or account-mode interactions that the schema hints at.

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

Conciseness4/5

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

Two short sentences, front-loaded with the identifying phrase and followed by the constraint that matters. No filler, though the leading 'Unified Dutify list_workspaces:' is partly redundant with the tool name.

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

Completeness3/5

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

With annotations covering safety and no output schema required, the definition is nearly adequate. Still, for a discovery tool it never states what the caller gets back (workspace names/identifiers) or how the account/workspace params relate on this specific call, leaving a small but real gap.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters are fully documented in the schema itself. The description adds no parameter-level meaning beyond that, which is the expected baseline when the schema does the work.

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

Purpose4/5

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

The description states the resource ('workspace discovery') and qualifies it as 'fresh credential/workspace', making clear it enumerates workspaces visible to the current credentials. It does not, however, differentiate against close siblings like find_my_workspace or list_accounts, leaving the agent to 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.

Usage Guidelines3/5

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

It gives a usable precondition — 'Does not require a selected workspace or reserve quota' — which implies this is the call to make before workspace context exists. But it names no alternative and never says when to prefer find_my_workspace or how it relates to list_accounts, so 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.

pm_add_comment_reactionA
Destructive
Inspect

Add an emoji reaction to a task comment. reactionType is the emoji code (e.g. "thumbs_up", "heart", "smile"). Each user may add at most one reaction of each reactionType per comment. Requires COMMENT-level access on the task. API-key scope: tasks:write.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
reactionTypeYesEmoji code, e.g. "thumbs_up", "heart"
taskIdentifierYesTask identifier (tsk_…)
commentIdentifierYesComment identifier (cmt_…)

TDQS

A4.2/5.0
Behavior4/5

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

Annotations only carry the generic write/destructive/idempotency flags; the description adds real behavioral context the agent would otherwise lack: the COMMENT-level access requirement, the `tasks:write` API-key scope, and the per-user uniqueness cap that determines whether a repeat call succeeds or fails. It never says what a successful response contains, but the mutation prerequisites are covered.

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

Conciseness5/5

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

Four short sentences, front-loaded with the action, then parameter meaning, then the business rule, then auth requirements. Nothing is repeated from the schema or annotations.

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

Completeness4/5

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

With no output schema, the description could say what a successful call returns (e.g. the created reaction), but for a small single-purpose mutation tool it covers action, parameter format, uniqueness constraint, and auth. The remaining gap is minor.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description earns a bump by defining reactionType's format and adding the 'one reaction of each type per comment' constraint, which is a semantic rule about the parameter that the schema does not express.

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

Purpose5/5

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

States a specific verb and resource ('Add an emoji reaction to a task comment') and immediately disambiguates the ambiguous parameter ('reactionType is the emoji code'). It is clearly distinguishable from pm_remove_comment_reaction and pm_list_comment_reactions despite similar naming.

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

Usage Guidelines3/5

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

Usage context is implied by the access and scope requirements, and the one-reaction-per-type rule signals what happens on repeat calls, but there is no explicit routing to siblings such as pm_remove_comment_reaction for undoing a reaction or pm_list_comment_reactions for checking what already exists.

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

pm_add_tasks_to_sprintA
Destructive
Inspect

Associate tasks with a sprint. All tasks must belong to the same space as the sprint group. Pass identifiers (tsk_…), not task keys. Returns updated SprintDTO. API-key scope: sprints:write.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
taskIdentifiersYesTask identifiers (tsk_…); 1+ required
sprintIdentifierYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare write/destructive/non-idempotent, and the description adds value on top: the required `sprints:write` scope, the return payload (updated SprintDTO), and the cross-entity space constraint. It does not explain why the operation is flagged destructive or what a partial/failed association leaves behind, 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.

Conciseness5/5

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

Four short sentences, each load-bearing: purpose, constraint, identifier format, return type, scope. The most important routing information is front-loaded with zero filler.

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

Completeness4/5

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

For a mutating, non-idempotent tool with no output schema, the description covers purpose, precondition, identifier format, return type, and auth scope. What's missing is the effect on tasks already assigned elsewhere and the consequence of re-adding the same task, which matters given idempotentHint=false and destructiveHint=true.

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

Parameters3/5

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

Schema coverage is 75% and account/workspace/taskIdentifiers already carry thorough inline documentation, so the schema does the heavy lifting. The description only reinforces the tsk_ identifier format and leaves sprintIdentifier completely unexplained in both description and schema; baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ("Associate tasks with a sprint") in the first sentence, which cleanly separates it from the sibling pm_remove_tasks_from_sprint and from task-mutation tools like pm_update_task. No ambiguity about what the call does.

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

Usage Guidelines4/5

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

Gives real prerequisites: all tasks must be in the same space as the sprint group, and identifiers (tsk_…) must be used rather than task keys. It does not explicitly state when to prefer this over pm_update_task's sprint field or what happens if a task is already in another sprint, 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.

pm_add_team_memberA
Destructive
Inspect

Add a single user to a team. Pass the user UUID (from pm_list_workspace_members). Idempotent — adding a user who is already a member is a no-op. Requires MANAGE_TEAMS. API-key scope: teams:write.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
userUuidYesUser UUID to add
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
identifierYesTeam identifier (team_…)

TDQS

A3.5/5.0
Behavior1/5

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

The description directly contradicts the annotations: it states 'Idempotent — adding a user who is already a member is a no-op,' while the annotations declare idempotentHint=false. Although it adds useful permission and scope details, the idempotency contradiction is a serious inconsistency.

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

Conciseness5/5

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

Three compact sentences, front-loaded with the core action, followed by parameter source, idempotency, and permissions. Every sentence is relevant and there is no wasted text.

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

Completeness3/5

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

The description covers permissions, API-key scope, parameter source, and intended behavior, which is useful for a mutation tool with no output schema. However, the incorrect idempotency claim undermines completeness, and return behavior is not described.

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

Parameters3/5

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

Schema description coverage is 100%, so parameter meanings are already documented. The description adds marginal value by indicating that userUuid should come from pm_list_workspace_members, but does not explain the other parameters beyond schema coverage.

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

Purpose5/5

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

The description states a specific verb and resource: 'Add a single user to a team.' It also points to the UUID source and distinguishes the operation clearly from sibling tools like pm_remove_team_member and pm_list_workspace_members.

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

Usage Guidelines4/5

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

It gives clear usage context: pass the user UUID from pm_list_workspace_members, requires MANAGE_TEAMS, and needs API-key scope teams:write. It does not explicitly name when not to use this tool, but the requirements and source are well specified.

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

pm_bulk_change_task_typeA
Destructive
Inspect

Change the task type for many tasks at once (≤5000 per call). taskIdentifiers are stable wire identifiers (e.g. tsk_…) — task keys (PROJ-42) are NOT accepted here; use pm_search_tasks first if you only have keys. taskType is a name (e.g. "Bug") or null to clear the type. Returns 200 sync for ≤500 tasks; 202 with a {jobId, statusUrl} for larger batches — poll the statusUrl for completion. API-key scope: tasks:write.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
taskTypeYesTarget task type name (resolved against the workspace catalogue), or null to clear the type on all listed tasks
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
taskIdentifiersYesStable task identifiers (tsk_…); 1 to 5000 entries

TDQS

A4.7/5.0
Behavior5/5

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

Adds substantial context beyond the annotations: `taskType: null` destroys the existing type assignment, batches ≤500 return 200 synchronously while larger ones return 202 with a {jobId, statusUrl} that must be polled, and the call requires `tasks:write` scope. Those are exactly the operational facts (async contract, clearing semantics, auth scope) that destructiveHint/openWorldHint 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.

Conciseness5/5

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

Three sentences, each carrying a distinct load: scope, input constraints, and return/async behavior with auth scope. No filler and the most decision-relevant facts (scope and identifier format) come first.

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

Completeness5/5

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

For a destructive batch mutation with no output schema, the description covers the cap, input format pitfalls, the sync/async split with polling instructions, and the required scope — everything an agent needs to invoke and follow up correctly. Nothing material is missing.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds a genuinely non-redundant constraint: `taskIdentifiers` are stable wire IDs and PROJ-42 style keys will be rejected, which the schema does not state. It also restates the name-or-null semantics of `taskType`, which is already in the schema, so it does not earn a 5.

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

Purpose5/5

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

States a specific verb and resource ('Change the task type') plus the batch scope ('many tasks at once, ≤5000 per call'), which immediately separates it from single-task siblings like pm_update_task. The parenthetical cap is front-loaded right in the first clause.

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

Usage Guidelines4/5

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

Explicitly routes the agent when it has the wrong input: 'task keys (PROJ-42) are NOT accepted here; use pm_search_tasks first if you only have keys.' That is a genuine when/when-not/alternative statement. It does not, however, say anything about when to prefer this over per-task updates for small batches, so the routing is not fully exhaustive.

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

pm_cancel_invitationA
Destructive
Inspect

Revoke a pending workspace invitation by its identifier. Caller needs MANAGE_USERS permission. Returns 204. API-key scope: users:write.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
invitationIdentifierYesInvitation identifier

TDQS

A4.1/5.0
Behavior4/5

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

Beyond the annotations (destructive, non-idempotent, open-world), the description adds the required permission (MANAGE_USERS), the exact HTTP outcome (204), and the API-key scope (users:write). These are real operational facts an agent needs before invoking a destructive call, though irreversibility/rate-limit details are absent.

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

Conciseness5/5

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

Three short sentences, front-loaded with the action and its target, followed by permission, result, and scope. No filler; every clause carries information.

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

Completeness5/5

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

For a single-target destructive operation with no output schema, the definition covers what is acted on, the permission prerequisite, and the return code (204, empty body). 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.

Parameters3/5

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

Schema description coverage is 100%, so account, workspace, and invitationIdentifier are already documented in the schema. The description only restates that the identifier selects the invitation; baseline 3 applies since the schema does the heavy lifting.

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

Purpose5/5

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

States a specific verb (revoke) and resource (pending workspace invitation) plus the means of selection (by its identifier). This clearly distinguishes it from pm_send_invitation, pm_list_invitations, and the member-management siblings without needing to name them.

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

Usage Guidelines3/5

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

The word 'pending' implies the tool only applies to invitations not yet accepted, which is useful scoping. However, no alternatives are named (e.g., pm_remove_workspace_member for accepted members) and there is no explicit when-not guidance beyond that implication.

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

pm_change_member_roleA
Destructive
Inspect

Change a member's workspace access level. userUuid is the target user's UUID (NOT email — call pm_list_workspace_members first to find it). workspaceAccessLevelId is a numeric Long id from the workspace /access-levels catalogue (e.g. 1, 2, 3) — fetch it via the catalog meta tools or your existing endpoint introspection if you don't already have it. Caller needs MANAGE_USERS permission. Note: this endpoint is HTTP PUT on the collection path (not PATCH on a sub-resource). API-key scope: workspaces:write.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
userUuidYesTarget user UUID
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
workspaceAccessLevelIdYesNumeric access-level id (Long); list /v1/workspaces/{ws}/access-levels to discover

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and idempotentHint=false, so the description's most valuable additions are the authorization requirements (MANAGE_USERS, `workspaces:write` scope) and the note that this is a PUT on the collection path rather than a PATCH on a sub-resource — which warns that the whole role assignment is replaced. It does not describe what happens to the member's prior access level or what the response contains, leaving a modest gap for a destructive mutation.

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

Conciseness4/5

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

Front-loaded with the core action, then parameter hints, then permissions and transport details — a sensible priority order. Slightly dense with backticked field names and one long parenthetical, but every sentence carries operational information rather than filler.

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

Completeness4/5

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

For a destructive mutation with no output schema, the description covers permission requirements, parameter discovery paths, and the HTTP shape of the call. The only missing piece is what is returned or confirmed after the change, which is a minor omission given the absence of an output schema.

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

Parameters4/5

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

Schema coverage is already 100%, but the description adds real meaning beyond the schema: it warns that userUuid is a UUID and explicitly NOT an email, and that workspaceAccessLevelId is a numeric Long (e.g. 1, 2, 3) drawn from a catalogue endpoint. These clarifications prevent the two most likely invocation errors.

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

Purpose5/5

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

States a specific verb and resource ("Change a member's workspace access level") and implicitly scopes to an existing workspace member, which separates it from pm_remove_workspace_member, pm_add_team_member, and pm_list_workspace_members. No ambiguity about what the tool does.

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

Usage Guidelines4/5

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

Gives explicit prerequisites: call pm_list_workspace_members first to obtain userUuid, and fetch the access-level id from the `/access-levels` catalogue. It also states the required MANAGE_USERS permission and API-key scope. It does not explicitly say when to use a different tool (e.g., removal or invitation), so it stops just short of the top score.

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

pm_clone_viewAInspect

Clone an existing view into a (possibly different) scope. Requires VIEW on the source and EDIT on the target scope. API-key scope: views:write.

NameRequiredDescriptionDefault
nameNoOptional new name (defaults to "<source> (copy)")
scopeYes
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
identifierYesSource view identifier
scopeIdentifierNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already establish that this is a non-read-only, non-idempotent, non-destructive operation. The description adds valuable permission requirements and API-key scope details beyond those annotations, though it does not describe what view contents are copied or omitted.

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

Conciseness5/5

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

Two compact sentences front-load the core operation and then immediately state the permission requirements. There is no filler.

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

Completeness4/5

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

For a mutation tool with six parameters and no output schema, the description gives enough to call it correctly with the required permission context. It could be more complete by explaining what clone semantics include, but the essential invocation information is present.

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

Parameters3/5

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

Schema description coverage is 67%, with the required `identifier` and `scope` parameters reasonably documented via descriptions/enums. However, `scopeIdentifier` has no schema description and the description does not clarify its role, so the description does not fully compensate for the remaining coverage gap.

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

Purpose5/5

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

The description uses a specific verb and resource: "Clone an existing view." It also clarifies the target can be a different scope, making the operation distinct from siblings like pm_create_view or pm_update_view.

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

Usage Guidelines4/5

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

It states clear prerequisites: VIEW on the source and EDIT on the target scope, plus the required API-key scope `views:write`. It does not explicitly compare against alternatives such as creating a new view from scratch, but the cloning context is unambiguous.

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

pm_complete_sprintA
Destructive
Inspect

Transition a sprint from IN_PROGRESS to DONE. Optionally pass rolloverSprintIdentifier to move incomplete tasks into a different sprint (typically the next one in the group). Omit the field to leave incomplete tasks unsorted (no rollover). API-key scope: sprints:write.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
sprintIdentifierYes
rolloverSprintIdentifierNoOptional. Identifier of the sprint to roll over incomplete tasks to. Omit/null to skip rollover.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already mark this destructive and non-idempotent; the description adds real value beyond them by disclosing the side effect on incomplete tasks and the two distinct outcomes (rollover vs. left unsorted). It also names the required API-key scope (`sprints:write`), which annotations cannot express. It stops short of saying whether the transition is reversible or what happens if the rollover target is closed/missing.

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

Conciseness5/5

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

Three short sentences, front-loaded with the action and state transition, followed by the rollover semantics and the auth scope. No filler and no repetition of schema content.

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

Completeness4/5

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

For a destructive, non-idempotent mutation with no output schema, the description covers the core behavior, the optional side effect, and the permission requirement. Remaining gaps (reversibility, behavior when the rollover target is invalid, or effect on sprint dates) are minor but not fully covered.

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

Parameters4/5

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

Schema coverage is 75%, and the description fills the important semantic gap: it clarifies that omitting `rolloverSprintIdentifier` means no rollover (versus failing or defaulting), and explains the intended target sprint. `account` and `workspace` are already well documented in the schema, so the description correctly doesn't repeat them.

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

Purpose5/5

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

States a precise verb and resource plus the exact state transition ('Transition a sprint from IN_PROGRESS to DONE'), which is unambiguous and separable from siblings like pm_start_sprint or pm_update_sprint. An agent knows exactly what operation this performs without opening the schema.

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

Usage Guidelines4/5

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

Gives explicit conditional guidance for the optional rollover: pass it to move incomplete tasks to another sprint, omit it to leave them unsorted, and notes the rollover target is 'typically the next one in the group'. It does not explicitly contrast with pm_update_sprint or pm_start_sprint, so the alternative-tool 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.

pm_configure_task_sharingA
Destructive
Inspect

Enable, disable, or reconfigure public sharing for a task. Pass shared: true to generate a public link (or refresh the configuration); the response includes the resulting publicLink. Pass shared: false to revoke an existing share. All other fields are optional toggles for which slices of the task are visible to a public viewer. Requires FULL access to the task. API-key scope: tasks:write.

NameRequiredDescriptionDefault
sharedNotrue to publish, false to revoke
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
expiresAtNoOptional ISO 8601 timestamp when the share link should auto-expire (e.g. "2026-12-31T23:59:59Z")
shareTagsNoExpose tags
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
shareStatusNoExpose current status
shareDueDateNoExpose due date
shareAssigneeNoExpose assignees on the public view
shareCommentsNoExpose comments
sharePriorityNoExpose priority
shareSubtasksNoExpose subtasks
taskIdentifierYesTask identifier (tsk_…) or short key
shareAttachmentsNoExpose file attachments
shareDescriptionNoExpose task description
shareCustomFieldsNoExpose custom field values
sharedCustomFieldIdentifiersNoExplicit allow-list of custom-field identifiers to expose (when shareCustomFields=true)

TDQS

A4/5.0
Behavior4/5

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

Adds real context beyond the annotations: the response carries a publicLink, publishing refreshes an existing configuration, and FULL task access plus tasks:write scope are required. What is not disclosed is the blast radius of a reconfigure (whether toggling fields silently hides content from already-issued links) or whether revoking invalidates prior URLs.

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

Conciseness5/5

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

Four sentences, front-loaded with the action, then the true/false semantics, then the toggle meaning, then the access requirement. Nothing repeated and nothing padding.

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

Completeness4/5

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

Covers the essentials for a 16-parameter mutation with no output schema: action, mode semantics, auth requirement, and the notable return field. Gaps are around edge behavior (reconfiguring an existing share, interaction between custom-field flags) rather than core invocation.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. The description explains the shared flag's two modes and frames the remaining booleans as 'which slices of the task are visible to a public viewer', but it does not clarify the interaction between shareCustomFields and sharedCustomFieldIdentifiers or the expiresAt behavior beyond what the schema already says.

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

Purpose4/5

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

States a specific verb set ('Enable, disable, or reconfigure') against a specific resource ('public sharing for a task'), so the mutation role is unmistakable. It doesn't name or contrast with the read-side sibling pm_get_task_sharing, leaving that routing to inference.

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

Usage Guidelines4/5

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

Gives clear conditions for the two modes ('shared: true' to publish or refresh, 'shared: false' to revoke) plus prerequisites ('Requires FULL access to the task', 'API-key scope: tasks:write'). No explicit when-not guidance or reference to pm_get_task_sharing as the read alternative.

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

pm_confirm_import_mappingsA
Destructive
Inspect

Confirm column mappings for a previewed CSV import job and start async import processing. Call this AFTER another (non-MCP) client has uploaded the CSV via /csv/preview and produced a job in PREVIEW status. columnMappings is a non-empty array of objects with: csvHeader (exact CSV column name), targetField (e.g. 'title', 'status', or a custom field identifier), and targetType ('builtin' or 'custom_field'). API-key scope: imports:write.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
jobIdentifierYes
columnMappingsYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already flag destructive=true, non-idempotent, open-world; the description adds the async-processing nature, the PREVIEW-state precondition, and the required `imports:write` API-key scope. It stops short of saying what happens to data after the import runs or whether confirmed mappings can be changed later, which matters 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.

Conciseness5/5

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

Three sentences, all load-bearing: purpose, precondition, and parameter/scope detail, with the action front-loaded.

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

Completeness4/5

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

There is no output schema, and the description does not say what the call returns (job id, new status) or how to track progress. For a destructive async-starting tool that is a real gap, though annotations cover the safety profile.

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

Parameters4/5

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

Schema coverage is only 50%, and the description compensates well for `columnMappings` by giving an example value for targetField and the allowed targetType values ('builtin' or 'custom_field'). However, `jobIdentifier` has no description in either the schema or the description beyond context.

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

Purpose5/5

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

States the specific verb (confirm column mappings), the resource (a previewed CSV import job), and the consequence (starts async import processing), which cleanly separates it from pm_get_import_job and pm_list_import_jobs.

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

Usage Guidelines4/5

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

Gives a clear precondition: it must be called AFTER a non-MCP client uploads via /csv/preview and produces a job in PREVIEW status. It does not name the MCP-side sibling (pm_get_import_job) as the way to verify that state, so routing is slightly incomplete.

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

pm_count_unread_notificationsA
Read-onlyIdempotent
Inspect

Return the bare unread-notification count (a Long) for the current user in the active workspace. The response body is a single number, not an object. API-key scope: notifications:read.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover safety (readOnly, idempotent, non-destructive), and the description adds genuinely new context: the response is a bare Long rather than an object, and the call requires the `notifications:read` API-key scope. It also pins the count to the current user in the active workspace, which 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.

Conciseness5/5

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

Three short sentences, front-loaded with the payload ('bare count ... a Long'), followed by the response-shape clarification and the scope requirement. Nothing is repeated or wasted.

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

Completeness5/5

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

For a zero-required-param counter with no output schema, the description supplies the missing return-value information (single number, not an object), the auth requirement, and the targeting rule. An agent has everything needed to call and interpret it.

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

Parameters3/5

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

With 100% schema description coverage, the two params (account, workspace) are already fully documented and neither is required. The description's phrase 'active workspace' loosely ties to the workspace parameter but adds no syntax or override behavior beyond the schema, so the baseline applies.

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

Purpose5/5

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

States a specific verb and resource ('Return the bare unread-notification count') plus scope ('current user in the active workspace') and return type ('a Long'). The emphasis on 'bare ... count, not an object' implicitly separates it from the list-style sibling pm_list_notifications without the agent needing to open the schema.

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

Usage Guidelines3/5

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

Usage is only implied: needing just a number rather than full notification records suggests when to pick this over pm_list_notifications, but no alternative is named and no when-not condition is given. Adequate but leaves the routing decision to inference.

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

pm_create_automationAInspect

Create an automation rule. Exactly ONE scope must be set — listIdentifier OR folderIdentifier OR spaceIdentifier. triggers and actions are arrays; conditionNodes is the flattened condition tree (omit for "always-true"). All parameters fields on triggers/actions/conditions are JSON-encoded strings, not nested objects. Before crafting, call pm_list_reference_data to learn the valid action/condition/trigger types. API-key scope: automations:write.

NameRequiredDescriptionDefault
nameYesDisplay name (max 200 chars)
activeNoStart enabled or disabled. Default true on backend.
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
actionsYesActions executed in order on trigger
triggersYesOne or more triggers (OR-ed)
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
descriptionNoOptional description (max 2000 chars)
conditionNodesNoOptional flat condition tree (AND/OR groups + leaf predicates)
listIdentifierNoScope: a list (use exactly one of list/folder/space)
spaceIdentifierNoScope: a space
folderIdentifierNoScope: a folder

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare this is a non-destructive, non-idempotent write, but the description adds real operational context: the required `automations:write` API-key scope, the JSON-encoded-string quirk for all `parameters` fields, and the "omit conditionNodes for always-true" default. It does not say what is returned (e.g., new automation id) or how duplicate/invalid payloads fail, which would complete the picture.

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

Conciseness5/5

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

Five short sentences, each carrying a distinct constraint or prerequisite, with the mandatory scope rule front-loaded ahead of the encoding and reference-lookup notes. No filler.

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

Completeness4/5

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

For an 11-parameter creation tool with full schema coverage and annotations present, the definition covers the hard parts: scope exclusivity, encoded strings, condition-tree flattening, and the reference-data prerequisite. Only the post-call behavior (what identifier is returned, whether the rule activates immediately) is left implicit, and no output schema exists to cover it.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds a cross-parameter constraint the schema cannot express: exactly ONE of listIdentifier/folderIdentifier/spaceIdentifier. It also clarifies that triggers/actions are arrays and that conditionNodes is a flattened tree, which reduces misuse of nested structure.

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

Purpose5/5

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

States a specific verb and resource ("Create an automation rule") and immediately scopes it with the exactly-one-of list/folder/space constraint. An agent can distinguish this from pm_update_automation or pm_get_automation without opening the schema.

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

Usage Guidelines4/5

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

Explicitly directs the agent to call pm_list_reference_data before crafting the payload, and states the exactly-one scope rule. It gives no guidance on when to prefer pm_update_automation over creating a new rule, so the alternative-selection path is only implied.

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

pm_create_custom_fieldAInspect

Create a custom field at workspace / space / list scope. scope=workspace ignores scopeName; scope=space takes a space name; scope=list takes a list name (first match in the workspace). For dropdown / labels (multi-select) types, pass options as an array of {value, color?, emoji?, orderIndex?}. Keep field names plain for column headers; set semantic emoji/color metadata for visual icons, using supported keys from pm_list_reference_data (custom-field-icon-options). Reuse suitable existing fields before creating another; color dropdown/label options consistently. CREATING A FIELD IS NOT ENOUGH TO MAKE IT VISIBLE: a custom field only shows up where it's added to a view's columns. After creating fields for a list, finish by creating/updating a view (pm_create_view / pm_update_view) whose columns include these fields, or the list keeps a defaults-only, empty-looking view. API-key scope: custom_fields:write.

NameRequiredDescriptionDefault
nameYesPlain custom-field display name. Do not prefix names with emoji for icons.
typeYesField type — text, number, date, checkbox, dropdown, labels, url, email, phone, etc.
colorNoOptional hex color code for the field icon
emojiNoOptional icon-picker key for the field icon. Query /v1/custom-field-icon-options for supported keys. Prefer semantically matching emojiNames when available (e.g. severity=fire, target=direct_hit, launch=rocket); use iconNames for structural/type icons.
scopeYes
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
optionsNoFor dropdown/labels types only
scopeNameNoSpace or list name (omitted for workspace scope)
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false), so the description's job is to add non-obvious behavior — and it does: the all-caps warning that a created field is invisible until added to a view's columns is a critical gotcha, as is "first match in the workspace" for list-scope resolution. It also discloses the required API-key scope custom_fields:write. Slightly short of 5 only because it doesn't describe failure behavior beyond the account note inherited 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.

Conciseness4/5

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

Front-loaded with the action and scope semantics, and the most important warning is set apart for emphasis. It is on the long side, with some redundancy — "Keep field names plain for column headers" repeats the schema's "Do not prefix names with emoji for icons", and the options structure duplicates the nested schema.

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

Completeness4/5

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

For a 9-parameter mutation tool with no output schema, the description covers auth scope, the post-create view requirement, reuse guidance, and naming conventions — enough for an agent to call it correctly and finish the job. The main residual gap is what the response returns (e.g. the new field's id), though the create-then-view workflow implies it is retrievable elsewhere.

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

Parameters4/5

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

Schema coverage is already 89%, so the baseline is 3; the description earns above that by explaining the scope/scopeName interaction ("scope=workspace ignores scopeName; scope=list takes a list name (first match in the workspace)"), which the schema does not state. The options-shape paragraph largely restates the nested schema properties, which caps the score below 5.

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

Purpose5/5

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

The opening sentence states a specific verb and resource ("Create a custom field") and immediately names the three scopes, which is exactly the axis an agent needs to disambiguate from siblings like pm_update_custom_field and pm_delete_custom_field. The type list and options handling further pin down what kind of object is produced.

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

Usage Guidelines5/5

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

It gives explicit when-to-use guidance ("Reuse suitable existing fields before creating another") and a required follow-up action (create/update a view whose columns include the fields), naming the exact sibling tools pm_create_view / pm_update_view. It also explains the scope-to-scopeName mapping, which is the primary decision an agent must make at call time.

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

pm_create_folderAInspect

Create a folder inside a space. Space identified by name. API-key scope: folders:write.

NameRequiredDescriptionDefault
nameYesFolder name
spaceYesSpace name
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
idempotencyKeyNoOptional. Pass a UUID to dedupe retries within a 5-minute window. The same key inside the window returns 409 DUPLICATE_REQUEST regardless of body — query by name/identifier to find what was created on the first attempt; never assume the second call failed.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=true, so the safety profile is covered. The description adds a concrete auth requirement by stating the API-key scope `folders:write`, which is useful operational context not present in annotations. It does not describe side effects or return behavior, but with annotations present this is a solid addition.

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

Conciseness5/5

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

The description is two short sentences with the core action and scope front-loaded. Every sentence carries useful information and there is no filler.

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

Completeness4/5

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

Given full schema coverage and annotation hints, the description is nearly complete: it states the action, target container, naming convention, and required API-key scope. It does not explain what is returned or any side effects, which is a minor gap because there is no output schema, but the essential calling information is present.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description restates that space is identified by name, which aligns with the schema but does not add syntax or constraints beyond it. The richer parameter details, including account, workspace, and idempotencyKey behavior, are already fully documented in the schema.

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

Purpose4/5

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

The description uses a specific verb and resource: 'Create a folder inside a space.' It clearly distinguishes creation from sibling operations like pm_update_folder or pm_delete_folder, though it does not explicitly name those alternatives. The extra note that the space is identified by name is useful but partially redundant with the schema.

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

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the create wording, but the description gives no explicit when-to-use guidance, prerequisites, or comparison with alternatives such as pm_create_list or pm_create_space. An agent can infer the intended use but is not helped in choosing between sibling creation tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_create_listAInspect

Create a task list inside a space (optionally inside a folder). Space and folder are identified by name. Omit folder to create the list directly under the space. Prefer setting icon and color on create when the list purpose is known. For icon, prefer a semantic emoji name first; use an icon identifier only when no emoji fits. List setup is not finished after this call: unless the user requested a bare list, reuse/add relevant custom fields with emoji/color header metadata, refresh pm_get_workspace_context, then use pm_list_views and pm_update_view to configure the auto-created primary view with explicit ordered columns and useful grouping/sorting. Verify the saved configuration before reporting completion. API-key scope: lists:write.

NameRequiredDescriptionDefault
iconNoOptional list icon. Prefer semantic emoji names first (rocket, fire, direct_hit, white_check_mark, pushpin, moneybag); use icon identifiers only when no emoji fits.
nameYesList name
colorNoOptional list color, usually a hex color
spaceYesSpace name
folderNoOptional folder name
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
idempotencyKeyNoOptional. Pass a UUID to dedupe retries within a 5-minute window. The same key inside the window returns 409 DUPLICATE_REQUEST regardless of body — query by name/identifier to find what was created on the first attempt; never assume the second call failed.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well past the annotations: it discloses that creation is incomplete on its own, requires a multi-step post-configuration and verification before reporting done, and names the required `lists:write` scope. It is also consistent with idempotentHint=false by relying on the documented idempotencyKey retry rule rather than claiming inherent idempotency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The essential action and placement rule are front-loaded in the first two sentences with no waste. The post-creation workflow sentence is a long multi-step run-on (custom fields, context refresh, view config, verification) that could be split for scannability, costing a point.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter mutation with no output schema, the description covers everything an agent needs: placement, optional attributes, the mandatory follow-on workflow, verification, and the auth scope. Nothing material about calling it correctly is left undocumented.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description still adds real value by prescribing emoji-first semantics for `icon` and the omit-folder behavior for `folder`. It does not add anything about `account`, `workspace`, or `idempotencyKey`, but those are already fully documented in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Create a task list") plus its exact placement scope ("inside a space, optionally inside a folder"), which is the key differentiator from pm_create_space and pm_create_folder. The parenthetical also clarifies the folder omission behavior, so an agent can distinguish it from siblings without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly covers when to omit folder, when to set icon/color ("when the list purpose is known"), and the exact when-not condition for skipping the follow-up workflow ("unless the user requested a bare list"). It also names the alternative/follow-up tools (pm_get_workspace_context, pm_list_views, pm_update_view) and the order to call them.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_create_spaceAInspect

Create a new space in the current workspace. Description / icon / color / isPrivate are optional metadata. Returns LiteSpaceResponse. API-key scope: spaces:write.

NameRequiredDescriptionDefault
iconNoEmoji or icon name
nameYes
colorNoHex color code
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
isPrivateNo
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
descriptionNo
idempotencyKeyNoOptional. Pass a UUID to dedupe retries within a 5-minute window. The same key inside the window returns 409 DUPLICATE_REQUEST regardless of body — query by name/identifier to find what was created on the first attempt; never assume the second call failed.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (not read-only, not destructive, not naturally idempotent), so the description's job is supplementary and it delivers: it names the required API scope and the return type LiteSpaceResponse. It stops short of describing side effects like behavior on duplicate names or what a newly created space contains.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action, followed by optional-field context and return/scope facts. No filler or repetition of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter mutation with no output schema, the description covers the essentials: what it creates, what is optional, what it returns, and the required auth scope. It leaves gaps around duplicate-name behavior and space nesting/hierarchy, which is why it is not a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 63% — account, workspace, idempotencyKey, icon, and color are richly documented in-schema, while name, isPrivate, and description are bare. The description only adds that description/icon/color/isPrivate are 'optional metadata', which is largely inferable from the required list, so it does not meaningfully compensate for the undocumented fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Create a new space') scoped to the current workspace, which is unambiguous. It does not, however, differentiate itself from adjacent creation tools such as pm_create_folder, pm_create_list, or wiki_create_space, so an agent still has to reason about which 'space' concept applies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: you call it when you want a new space. It adds a prerequisite ('API-key scope: spaces:write') which is useful eligibility context, but there is no explicit when-to-use/when-not guidance and no named alternative among the many sibling creation tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_create_sprintAInspect

Create a sprint inside a sprint group. New sprints start in NOT_STARTED state. name required (max 200 chars). goal, startDate, endDate optional (ISO-8601 instants for dates). API-key scope: sprints:write.

NameRequiredDescriptionDefault
goalNoSprint goal (max 5000 chars)
nameYes
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
endDateNoISO-8601 instant
startDateNoISO-8601 instant, e.g. 2026-04-14T00:00:00Z
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
groupIdentifierYesSprint group identifier

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (write, non-destructive, non-idempotent, open-world), so the bar is lower. The description still adds real context: the initial NOT_STARTED state, the 200-char name cap, ISO-8601 date format, and the required `sprints:write` API-key scope. It does not describe the response payload or duplicate-name behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with the action and the most important constraint (parent group). No filler, though the optional-field enumeration is largely recoverable from the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, yet the description never indicates what is returned on success (sprint id, state). It also omits how to resolve `groupIdentifier`. Everything needed to make the call is present, but the post-call picture is not.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 86%, so the schema already documents `account`, `workspace`, `goal`, and the date fields. The description's main additions are the 200-char limit on `name` (undescribed in the schema) and confirming which fields are optional; the ISO-8601 note merely repeats the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Create a sprint inside a sprint group'), which separates it from pm_create_sprint_group and pm_update_sprint. It does not name any sibling explicitly, but the scoping phrase 'inside a sprint group' carries the differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the create verb and the required groupIdentifier, but there is no explicit when-to-use, no prerequisite chain (e.g. obtain a group via pm_list_sprint_groups), and no mention of alternatives or when not to create a sprint.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_create_sprint_groupAInspect

Create a sprint group inside a space. name is required (max 100 chars). description is optional (max 2000 chars). defaultDurationDays is the default sprint length used when creating new sprints (1–90 days, optional). API-key scope: sprints:write.

NameRequiredDescriptionDefault
nameYesSprint group name (max 100 chars)
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
descriptionNoOptional description (max 2000 chars)
spaceIdentifierYesSpace identifier (spc_…)
defaultDurationDaysNoDefault sprint duration in days (1–90)

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the mutation/non-destructive/non-idempotent profile, and the description adds genuinely new context: the required API-key scope `sprints:write`. It does not warn that repeated calls may create duplicates (non-idempotent) or state what object is returned, 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and scope, then short constraint and auth sentences; no filler. Minor redundancy by echoing schema constraint values already documented per-field.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter create tool with no output schema, the definition covers inputs and auth scope but never indicates what comes back (e.g., the new group's identifier) or how to verify success — information an agent would otherwise have to discover by trial. Adequate but with a clear gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description restates the same constraints already in the schema for name (max 100), description (max 2000) and defaultDurationDays (1–90) without adding new meaning, and it says nothing about spaceIdentifier, account, or workspace.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — 'Create a sprint group inside a space' — which is distinct from the sprint-level siblings like pm_create_sprint and pm_list_sprint_groups. It does not, however, explicitly say how it differs from creating a sprint or why a group is needed, so an agent must infer the containment hierarchy.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied via the required spaceIdentifier and the 'inside a space' phrasing; there is no explicit when-to-use or when-not-to-use statement, and no routing to pm_create_sprint or pm_list_sprint_groups. An agent can guess this is the container step before creating sprints, but the description never says so.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_create_tagAInspect

Create a new tag in a space. Tags are auto-created on first inline use (e.g. tags: ["urgent"] when creating a task via the Lite API), so use this only when you need to pre-create a tag with specific colors before applying it. Returns the persisted TagDTO with its identifier. API-key scope: tags:write.

NameRequiredDescriptionDefault
nameYesDisplay name (case-sensitive — duplicates rejected per space)
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
textColorNoHex foreground color, e.g. "#FFFFFF". Optional.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
backgroundColorNoHex background color, e.g. "#3B82F6". Optional — server picks a default.
spaceIdentifierYesSpace identifier (sp_…)

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (non-destructive, non-idempotent, open-world write), so credit goes to what is added: the required API-key scope `tags:write` and the fact that the call returns the persisted TagDTO with its identifier. It does not cover duplicate-name failure behavior in the description, though the schema does note duplicates are rejected per space.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action, then the caveat, then the return/scope facts. Nothing is repeated from the schema and every clause carries decision-relevant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter write tool with no output schema, the description supplies what the structured fields cannot: the auto-creation alternative, the return type, and the auth scope. The workspace/account parameters are already exhaustively documented in the schema, so 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including hex color formats, case-sensitivity of `name`, and the full multi-account semantics of `account` and `workspace`. The description only alludes to "specific colors" and adds no syntax or constraint detail the schema lacks, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Create a new tag in a space") and distinguishes itself from the siblings that also touch tags (pm_get_tag, pm_update_tag, pm_delete_tag) by framing this as the pre-creation path. The reader knows exactly what will exist after the call.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the competing mechanism — tags are auto-created on first inline use such as `tags: ["urgent"]` — and then states the narrow condition that selects this tool: pre-creating with specific colors. That is a genuine when/when-not pair with a named alternative, not an implied one.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_create_taskAInspect

Create a task. In the result, title/webUrl are for presentation; displayKey is the optional visible key. Keep key/identifier for API calls and do not expose a hidden raw key in the summary. References are name-based: status/priority/level/taskType are names; assignees are emails; tags are strings (auto-created if missing); customFields is a {name: value} map. list is the task-list identifier (tl_…). For subtasks, set parent to a task key or identifier (omit list and the parent's list is used). Task type is OPTIONAL: omit taskType to inherit the closest non-null default along the three-level chain list → folder → space. There's NO workspace-level fallback — if all three are null the task is created untyped (taskType: null in the response), which is a valid persistent state. Use pm_list_task_types to see what types this workspace has (9 SYSTEM rows seeded at workspace creation, plus any CUSTOM ones). MANDATORY CUSTOM FIELDS: a list can mark custom fields required (isMandatory, per field via pm_get_workspace_context). Populate them in customFields on create AND update — the API rejects a write that leaves one empty with HTTP 400 errorCode VALIDATION_ERROR, details.field = the field's display name; the message also names it (e.g. Mandatory custom field 'Priority' requires a value). Fix and retry; don't ask the user as a substitute. API-key scope: tasks:write.

NameRequiredDescriptionDefault
listNoTask-list identifier (tl_…); omit if parent is set
tagsNo
levelNo
titleYes
nextToNoTask key/identifier to position next to
parentNoParent task key or identifier (for subtasks)
statusNoStatus name (e.g. "In Progress")
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
dueDateNoISO-8601 datetime
priorityNo
taskTypeNo
assigneesNoEmails
isPrivateNo
startDateNoISO-8601 datetime
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
descriptionNo
customFieldsNo{fieldName: value}. Include every field the list marks mandatory (isMandatory, see pm_get_workspace_context) — a missing required field is rejected with a 400 VALIDATION_ERROR (details.field = field display name, also named in the message). Note on email: multi-value is supported but OPT-IN per field via visualSettings.allowsMultiple (default false, and settable only on the rich custom-field endpoints, not the lite ones). When enabled, pass an array of email strings and/or {email,displayName,verified} objects, max 200 elements (over that = 400 "Array value exceeds maximum size of 200 elements"). When not enabled, pass a string or object — an array is rejected with "Email field value must be a string or object", and the fix is to enable allowsMultiple, not to use a comma-separated string (that fails format validation). phone/website/location remain single-value.
estimatedTimeNoMinutes
idempotencyKeyNoOptional. Pass a UUID to dedupe retries within a 5-minute window. The same key inside the window returns 409 DUPLICATE_REQUEST regardless of body — query by name/identifier to find what was created on the first attempt; never assume the second call failed.
recurrenceRuleNoiCal RRULE string

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations, it discloses important side effects and error behavior: tags are auto-created if missing, mandatory custom fields cause HTTP 400 VALIDATION_ERROR on create/update, task types inherit through list → folder → space with no workspace fallback, and API-key scope is `tasks:write`. It also explains presentation vs API identifiers and hidden key handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but appropriately sized for a 20-parameter creation tool, and it front-loads the core action. Some early presentation/security guidance about title, webUrl, displayKey, and hidden raw keys could be separated from invocation semantics, but most sentences carry useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity, absence of an output schema, and 20 parameters, the description is complete enough for correct invocation: it covers task creation, subtask behavior, task-type inheritance, mandatory custom fields, error recovery, and auth scope. Return-value details are partially covered when relevant, though an output schema would still be useful.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds substantial meaning beyond the schema: status/priority/level/taskType are names, assignees are emails, tags are auto-created strings, customFields is a name-value map with mandatory-field rules, `list` is a `tl_…` identifier, and `parent` changes list inheritance. With schema coverage at 65%, this compensates well for parameters that are only lightly documented in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: "Create a task." It clearly distinguishes creation from sibling update/delete/comment tools, and the remaining details are scoped to task creation semantics rather than unrelated behavior.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear contextual guidance: use `parent` for subtasks, omit `list` when the parent supplies it, omit `taskType` to inherit defaults, and populate mandatory custom fields. It does not explicitly name alternative sibling tools or when-not-to-use conditions, so it falls short of the top score.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_create_task_commentAInspect

Add a comment to a task. mentions is an array of emails — the server resolves them to user UUIDs and substitutes @<email> literals in text with mention spans. Pass replyTo (a comment identifier) to thread. API-key scope: tasks:write.

NameRequiredDescriptionDefault
refYes
textYesComment body (plain text)
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
replyToNoParent comment identifier (cmt_…) for threaded replies
mentionsNoEmails to @-mention (server resolves to UUIDs)
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say this is a non-idempotent, non-destructive write; the description adds real context beyond that: mention emails are resolved server-side to UUIDs and `@<email>` literals inside `text` are rewritten into mention spans, plus the required `tasks:write` API-key scope. What it omits is what the response contains and whether duplicate comments are rejected.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the action, then the two behaviors an agent cannot infer (mention resolution, threading), then the auth scope. Nothing redundant with the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter write tool with 83% schema coverage, no output schema, and annotations covering the safety profile, the description supplies what is missing: the mention-substitution mechanic, threading, and the required scope. An agent could call this correctly without further reading.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 83%, so the baseline is 3; the description goes further by explaining the side effect of `mentions` on the `text` body (literal substitution of `@<email>`), which the schema does not convey. `ref`, `account`, and `workspace` are left to their schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ("Add a comment to a task"), so the operation is unambiguous. It does not explicitly distinguish itself from nearby siblings like pm_update_task_comment or pm_add_comment_reaction, but the create/append semantics are clear from the verb.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives conditional usage hints ("Pass `replyTo` to thread", mentions array for @-mentions) but never states when to prefer this over pm_update_task_comment or pm_add_comment_reaction, nor any prerequisite like task access. Usage is implied by the parameter hints rather than declared.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_create_task_relationshipBInspect

Create a relationship from one task to another. type is the relationship-type name in the workspace (e.g. "Blocking"). target is a task key or identifier. The current task (ref) is the owner. API-key scope: tasks:write.

NameRequiredDescriptionDefault
refYesOwner task key or identifier
typeYesRelationship type name
targetYesTarget task key or identifier
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the mutation/safety profile (readOnly=false, destructive=false, idempotent=false, openWorld=true), so the description only needs to add context. It does add real value with the API-key scope `tasks:write` and the owner-vs-target direction, but says nothing about duplicate relationships, failure modes, or whether the type must exist beforehand.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with the action, with no filler. The trailing auth-scope note is terse and useful rather than padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers enough to invoke correctly: direction, type format, and auth scope. With no output schema, it should say what a successful call returns (e.g. the created relationship object) and what happens when the relationship already exists – both gaps keep it at minimum-viable rather than complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds concrete meaning: `type` is a workspace-scoped relationship-type name with an example ('Blocking'), and `target` is a task key/identifier. It also reinforces the owner role of `ref`, which helps an agent orient the direction correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Create a relationship from one task to another') and clarifies directionality, which is the non-obvious part of this operation. It does not explicitly name the sibling tools (pm_list_task_relationships, pm_delete_task_relationship), but the purpose is unambiguous against them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus alternatives, nor any exclusions or prerequisites surfaced as usage advice. The mention that `type` is a workspace relationship-type name hints that a type must already exist, but this is left implicit rather than stated as a precondition.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_create_teamAInspect

Create a new team in the current workspace. Returns the persisted TeamDTO including its identifier. Requires the workspace MANAGE_TEAMS permission. API-key scope: teams:write.

NameRequiredDescriptionDefault
iconNoIcon identifier or emoji
nameYesDisplay name (max 100 chars)
aliasNoShort alias / @handle (max 100 chars)
colorNoHex color, e.g. "#E91E63"
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
descriptionNoOptional description (max 10000 chars)
memberUuidsNoInitial members (user UUIDs). Optional — add members later via pm_add_team_member.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes beyond the annotations by disclosing the return payload (persisted TeamDTO with identifier) and the auth requirements (MANAGE_TEAMS, teams:write). It stays consistent with readOnlyHint=false and destructiveHint=false. It does not cover collision behavior, e.g. what happens if the name or alias already exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action, then return value, then permissions. Every sentence carries information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully names the returned TeamDTO and identifier, and it covers the permission/scope gate. The only missing piece is failure mode on duplicate name/alias, which matters for a non-idempotent create.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and each of the 8 parameters, including account/workspace selection and memberUuids, is described in the schema. The description adds no parameter-level detail beyond the required 'name', so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Create a new team in the current workspace'), which cleanly separates it from pm_update_team, pm_delete_team and pm_list_teams. It does not explicitly name those siblings, but the verb/resource pairing is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear prerequisite context ('Requires the workspace MANAGE_TEAMS permission', 'API-key scope: teams:write'), which tells an agent upfront whether the call can succeed. It does not state when to use this versus pm_add_team_member or pm_update_team, so exclusion guidance is absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_create_viewAInspect

Create a view. type is one of list / board / table / dashboard / gantt / calendar / gallery. For a newly created list, prefer configuring its auto-created primary view with pm_update_view; add another view only for a distinct workflow. ALWAYS pass columns listing exactly what should be visible, in display order, INCLUDING every custom field you want shown — a view created without columns falls back to system defaults, so custom fields you just created will NOT appear and the view looks empty. This is the most common mistake here: do not create a view and forget to select its columns. If unsure which custom-field column identifiers exist for this scope, call pm_get_workspace_context first instead of guessing. Columns and filters are applied atomically with the create — invalid columnIdentifier or filter shape rolls the whole create back with 400, so a 201 always means the view exists and is fully configured. In columns, the list order is display order and omitted columns are hidden. Keep new custom-field/header names plain; custom-field icons belong in emoji/color metadata. API-key scope: views:write.

NameRequiredDescriptionDefault
nameYes
typeYes
scopeYes
sortByNo
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
columnsNoVisible columns in display order — strongly recommended on every create. Each item should include columnIdentifier, isMandatory, and optional fixed. Include every custom field you want viewable; omitted columns are hidden and leaving this out yields a defaults-only, effectively empty view. Headers come from the underlying system/custom-field names; keep names plain and use custom-field emoji/color metadata for icons.
filtersNoOptional filter groups (FilterGroupDTO shape).
groupByNoField name to group by (status, priority, etc.)
isPrivateNo
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
sortDirectionNo
scopeIdentifierNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only give the generic write profile; the description adds real operational behavior: columns/filters are applied atomically, an invalid columnIdentifier or filter shape rolls back with 400, a 201 therefore guarantees a fully configured view, and no `columns` means defaults-only/effectively empty. It also discloses the required `views:write` scope, which no annotation covers.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded and mostly dense, with the critical columns warning placed early. Minor waste: the type enum is restated verbatim from the schema, and the columns mistake is asserted twice ('ALWAYS pass columns...' followed by 'This is the most common mistake here').

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers type selection, column configuration, atomicity/error semantics, discovery of identifiers, and auth scope — enough for a 12-param create tool with no output schema. It never explains what `scope` vs `scopeIdentifier` mean or how sortBy/sortDirection/isPrivate interact with the created view, which leaves a real hole for a create with scope-relative targeting.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 42%, and while the description adds genuine meaning for `columns` (list order is display order, omitted columns are hidden, atomic validation) much of that is already echoed in the schema's own param description. The other undocumented parameters — scope, scopeIdentifier, sortBy, sortDirection, isPrivate, workspace — get no explanation in the description, so the gap is only partly compensated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ('Create a view') and immediately enumerates the supported view types, so the agent knows exactly what object is produced. It also distinguishes itself from pm_update_view by steering primary-view configuration there rather than duplicating it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when not to use it ('prefer configuring its auto-created primary view with pm_update_view; add another view only for a distinct workflow') and names a prerequisite discovery call (pm_get_workspace_context) for unknown column identifiers. Both the alternative and the escalation path are spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_create_webhookAInspect

Create an outgoing webhook subscription for the current workspace. The response includes a one-time secret (HMAC-SHA256 key used to verify the X-Webhook-Signature-256 header on delivery). SAVE THIS SECRET IMMEDIATELY — subsequent reads (pm_get_webhook / pm_list_webhooks) do NOT return it; the only way to get a new one is to delete and recreate the webhook. eventTypes are dash-cased names (e.g. "task-created", "task-status-changed", "comment-added"); the catalog has 130+ entries — common ones include task-created/deleted, task-status-changed, task-priority-changed, task-assignee-added/removed, task-due-date-updated, comment-added/updated, reaction-added, custom-field-value-updated, space-deleted, folder-deleted, task-list-deleted, workspace-user-role-changed. Optionally narrow delivery to a single entity by setting scopeType (SPACE / FOLDER / TASK_LIST / TASK) plus scopeEntityIdentifier; omit both for workspace-wide delivery. Outgoing payload envelope is {version, id, type, timestamp, workspaceIdentifier, data}; retries fire at +0s / +1min / +5min (3 attempts total) and treat both 4xx and 5xx as failures. API-key scope: webhooks:write.

NameRequiredDescriptionDefault
urlYesHTTPS endpoint that will receive POSTs
nameNoHuman-readable label for the webhook
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
scopeTypeNoOptional scope narrowing; requires scopeEntityIdentifier when set
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
eventTypesYesDash-cased event names, e.g. ["task-created", "comment-added"]
scopeEntityIdentifierNoIdentifier of the scoping entity (required when scopeType is set)

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavior beyond the annotations: one-time HMAC secret not returned by subsequent reads, required immediate saving, payload envelope, retry schedule and failure treatment, scope behavior, and required API-key scope. Annotations already mark this as non-read-only and non-idempotent, and the description complements them with operational details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The critical one-time secret warning is front-loaded and prominent. The description is dense and long, especially the event-type catalog, but most detail is operational and useful for correct invocation; some list compression could improve readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the description covers return semantics (secret), delivery behavior, retry policy, payload shape, scoping, and auth scope. It is complete enough for an agent to create and handle the webhook correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although schema coverage is 100%, the description meaningfully enriches parameters: eventTypes are dash-cased with a 130+ catalog and concrete common examples, scopeType plus scopeEntityIdentifier narrow delivery, and omitting both scope fields yields workspace-wide delivery. This adds real semantic guidance beyond the schema's brief parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: creating an outgoing webhook subscription for the current workspace. It is clearly distinguishable from pm_get_webhook, pm_list_webhooks, pm_update_webhook, and pm_delete_webhook by naming the create action and its one-time secret response.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly contextualizes creation, scope narrowing, and the consequence that reads do not return the secret, so recreation is required to rotate it. It does not explicitly compare against pm_update_webhook for modifying an existing webhook, but the create-vs-read distinction is strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_delete_automationA
Destructive
Inspect

Delete an automation rule. Returns 204. Existing audit log rows are preserved. API-key scope: automations:write.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
identifierYesAutomation identifier (auto_…)

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, so the description doesn't need to re-state danger. It does add value the annotations cannot: the 204 return code, the fact that audit log rows survive deletion (what is NOT destroyed), and the required `automations:write` API-key scope.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three terse sentences, front-loaded with the action, then the outcome, then the auth requirement. Nothing redundant and no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers action, response status, side-effect scope and auth scope for a destructive mutation with no output schema. The only mild gap is that the description never explicitly says the deletion is irreversible, though destructiveHint already implies it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already fully documents `account`, `workspace` and the `identifier` (auto_…) parameter. The description adds no extra parameter semantics; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Delete an automation rule'), which unambiguously separates it from pm_create_automation, pm_update_automation and pm_get_automation in the sibling list. No inference needed to know what it does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this versus pm_update_automation or pm_get_automation_audit, and no prerequisite or caution about choosing deletion. An agent must infer usage entirely from the verb.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_delete_custom_fieldA
Destructive
Inspect

Delete a custom field and all its values. Requires FULL access. 204. API-key scope: custom_fields:write.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
identifierYes

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool as destructive and non-idempotent, but the description adds valuable context beyond them: cascade deletion of all field values, the FULL access requirement, the 204 response code, and the required API-key scope. It stops short of stating irreversibility or error behavior, but it is notably informative for a deletion tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core action and cascade effect, then permission and scope. Every sentence contributes distinct information with no waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive tool with no output schema, the description covers the key operational facts: cascade deletion, FULL access requirement, 204 response, and API scope. The main remaining gap is the semantics of the required identifier parameter, but overall the definition is sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%, and the required 'identifier' parameter has no description in either the schema or the tool description. The description does not compensate by clarifying whether identifier refers to a field ID, name, or slug, leaving a required parameter semantically underspecified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Delete a custom field') and clarifies the cascade ('and all its values'), making the operation clearly distinct from siblings like pm_create_custom_field and pm_update_custom_field. It does not name alternatives explicitly, but the purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the verb 'Delete' and the prerequisite 'Requires FULL access' provides context, but there is no explicit guidance on when to choose this over alternatives such as updating or recreating a field. No exclusions or when-not-to-use conditions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_delete_folderA
Destructive
Inspect

Soft-delete a folder and its child lists+tasks. Requires FULL access. 204. API-key scope: folders:write.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
identifierYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations it discloses the cascade destruction footprint (child lists and tasks go too), the auth level required, the API-key scope token, and "204" so the agent knows there is no response body. That is substantial context the destructiveHint alone 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three terse clauses, front-loaded with the action and its blast radius before the access constraints. "204." is telegraphic but carries real information; everything present earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers blast radius, permissions, scope, and return shape for a destructive 3-param tool with no output schema. The remaining gap is what soft-delete means for recoverability and what `identifier` accepts.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

At 67% schema coverage the account and workspace params are well documented in the schema, but the one required parameter, `identifier`, has no description anywhere and the tool description does not clarify whether it is an ID, a slug, or a name. Baseline 3 fits a partially covered schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Soft-delete a folder and its child lists+tasks" gives a specific verb, an exact resource, and the cascade scope, which is what separates it from pm_delete_list and pm_delete_space. An agent can tell immediately which delete tool to reach for.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states prerequisites ("Requires FULL access", "API-key scope: folders:write") but never says when to choose this over deleting child lists individually or moving content with pm_update_folder. Usage is implied by the tool name rather than explained.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_delete_listA
Destructive
Inspect

Soft-delete a list and its tasks. Requires FULL access. 204. API-key scope: lists:write.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
identifierYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, it adds important mutation behavior: deletion is soft, it cascades to tasks, it requires FULL access, returns 204, and needs lists:write scope. These are exactly the operational details an agent needs for 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the operation and cascade effect, with no wasted wording. The terse 204 and scope notes are useful facts rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive list deletion, it covers cascade behavior, soft-delete semantics, permission requirements, response status, and API-key scope. Combined with annotations and schema descriptions, an agent has enough to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema fully documents account and workspace, but identifier has no schema description. The description implies identifier refers to the list being soft-deleted, but adds no format or acceptance details; with 67% schema coverage, the schema does most of the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: soft-delete a list and its tasks. The cascade to tasks distinguishes it from pm_delete_task and 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives prerequisites such as FULL access and the API-key scope, but does not state when to choose this over alternatives like pm_update_list or when deletion should be avoided. Usage is implied by the action name and description rather than explicitly guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_delete_saved_filterA
Destructive
Inspect

Delete a saved filter you own. NOTE: id is a numeric Long (e.g. 42), NOT a slug. Only the owner may delete. Returns 204.

There is NO endpoint to "apply" a saved filter — that is a UI affordance only. API-key scope: filters:write.

NameRequiredDescriptionDefault
idYesNumeric filter id (Long)
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
listIdentifierYesList identifier (tl_…)

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this as destructive, non-read-only, and non-idempotent. The description adds important behavioral context beyond annotations: owner-only authorization, required API-key scope, a 204 return status, and the warning that saved filters cannot be applied via API.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The definition is front-loaded with the core action, followed by tightly relevant constraints. The NOTE about `id` and the warning about the nonexistent apply endpoint both earn their place by preventing common invocation errors.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation with no output schema, the description supplies the key missing context: authorization requirements, API-key scope, return status, ownership restriction, and parameter-type warning. An agent has enough information to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all four parameters and sets the baseline at 3. The description adds useful clarification for `id`, explicitly warning it is a numeric Long and not a slug, with an example. Other parameters rely appropriately on their schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Delete a saved filter you own.' The ownership scope further narrows the operation, and the mention that there is no 'apply' endpoint helps distinguish deletion from a related but nonexistent action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear prerequisites: only the owner may delete, and the API-key scope is `filters:write`. It also prevents a likely misuse by stating there is no apply endpoint. It does not explicitly name sibling alternatives like pm_list_saved_filters or pm_save_filter, so it falls short of full when/when-not routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_delete_sprintA
Destructive
Inspect

Soft-delete a sprint. Tasks lose their sprint association but remain in their lists. 204 on success. API-key scope: sprints:write.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
sprintIdentifierYes

TDQS

A3.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by disclosing the key behavioral traits: deletion is soft, tasks survive but lose their sprint association, the response is 204, and the call requires the `sprints:write` API-key scope. These are exactly the facts an agent needs before firing 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the operation and its side effect, then the response signal, then the auth scope. No filler; every sentence carries distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Annotations cover the safety profile and the description covers side effects, response code, and scope, which is nearly everything needed for a destructive delete. Missing only edge behavior such as what happens if the sprint is already started or already deleted, and the required identifier's accepted format.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description says nothing about any of the three parameters, and the required `sprintIdentifier` has no schema description either — the agent gets no hint whether it takes an ID, a name, or a slug. The account/workspace params are well documented in the schema, but the single required param at 67% coverage leaves a real gap the description should have filled.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Soft-delete a sprint") and immediately qualifies the semantics, so an agent knows this removes the sprint rather than completing or updating it. It does not explicitly name pm_complete_sprint or pm_update_sprint as the non-destructive alternatives, so sibling differentiation is only implied.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase "soft-delete" hints at when this is appropriate versus completing a sprint, but there is no explicit when/when-not guidance or reference to pm_complete_sprint, pm_update_sprint, or pm_list_sprint_groups. Usage must be inferred by the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_delete_tagA
Destructive
Inspect

Delete a tag. The tag is removed from every task that currently carries it; the tasks themselves are not affected. Returns 204. API-key scope: tags:write.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
identifierYesTag identifier (tag_…)

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=false, and the description adds genuine context beyond them: the deletion cascades to every task carrying the tag, task records themselves survive, the call returns 204, and it needs tags:write scope. That is exactly the blast-radius information 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each carrying distinct information: action, blast radius, response code and auth scope. Front-loaded with the action and nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter destructive tool with no output schema, the description covers effect, side effects on related objects, the response code and the required scope. An agent has everything needed to decide and invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with account, workspace and identifier each fully documented in the schema, including the tag_ prefix convention. The description adds no parameter-level detail, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb plus resource ("Delete a tag"), which separates it from pm_get_tag, pm_create_tag and pm_update_tag by name alone. It stops short of explicitly contrasting itself with siblings that also mutate tag state, so it lands just under a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the verb, and the cascade scope hints at the main decision point (deleting the tag everywhere versus detaching it from one task). However, it never names an alternative such as updating a single task's tags, and gives no prerequisites beyond the API scope string.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_delete_taskA
Destructive
Inspect

Delete a task by ref. Cascade-deletes subtasks. Requires FULL access (not just EDIT). Returns 204 on success. API-key scope: tasks:write.

NameRequiredDescriptionDefault
refYesTask key or identifier
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: destructiveHint=true is already declared, but the description adds the crucial consequence that subtasks are cascade-deleted, the elevated permission requirement (FULL vs EDIT), the 204 response, and the required API-key scope `tasks:write`. That is exactly the extra context an agent needs before invoking 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four terse sentences, front-loaded with the action and immediately followed by the highest-risk fact (cascade delete). No filler, no repetition of the tool name, every sentence carries distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, cascade operation with no output schema, it covers consequence, permission, response code, and scope. The remaining gap is what else is destroyed or orphaned — comments, attachments, time entries, relationships — and whether deletion is recoverable, which matters given the cascade.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so `ref`, `account`, and `workspace` are all documented in the schema itself. The description only restates that deletion targets `ref` and adds no format or resolution detail beyond 'Task key or identifier', so the schema carries the load.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ('Delete a task by ref') and the identifying parameter, so it is immediately distinguishable from siblings such as pm_delete_task_comment and pm_delete_task_relationship. Cascade behavior is stated in the same breath, further narrowing the meaning.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than guided: the description never says when to prefer this over alternatives (e.g. pm_update_task to close/archive a task instead of destroying it) or how to obtain a valid ref (pm_search_tasks / pm_get_task). It does helpfully state the access prerequisite (FULL, not EDIT), which gives the agent a gating condition before calling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_delete_task_commentA
Destructive
Inspect

Delete a comment. Only the original author may delete. Returns 204. API-key scope: tasks:write.

NameRequiredDescriptionDefault
refYes
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
commentIdentifierYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already disclose destructive=true, idempotent=false, and openWorld=true; the description still adds the author-only restriction, the 204 response code, and the required `tasks:write` API-key scope, all of which are non-obvious. What it omits is what happens on failure (403 vs 404) and whether sibling comments/threads are affected.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, leading with the action, then the permission rule and the response/scope details. Nothing is wasted and the important constraint is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the safety-relevant behavior (author restriction, scope, 204) for a destructive 4-parameter tool with no output schema, which is reasonable. However, the two undocumented required parameters leave an agent guessing about identifier formats, which is a real gap for a delete operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50%: `account` and `workspace` are richly documented in the schema, but `ref` and `commentIdentifier` have no descriptions anywhere. The description says nothing about what `ref` refers to (task reference?) or the accepted form of `commentIdentifier`, so it does not compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Delete a comment'), which cleanly separates it from pm_update_task_comment and pm_list_task_comments in the sibling list. It does not explicitly name those siblings, so differentiation is inferred from the verb rather than spelled out.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Only the original author may delete' gives a concrete precondition that tells the agent when the call can succeed, and the scope note indicates required credentials. It stops short of naming an alternative path (e.g., updating/editing a comment instead) for callers who are not the author.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_delete_task_relationshipA
Destructive
Inspect

Delete a relationship by identifier. Returns 204. API-key scope: tasks:write.

NameRequiredDescriptionDefault
refYesOwner task key or identifier
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
relationshipIdentifierYes

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, so the safety profile is covered. The description still adds real value by disclosing the success response ('Returns 204', i.e. no body) and the required auth scope (`tasks:write`), neither of which is 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short, front-loaded sentences; the destructive action is stated first, followed by the response code and auth scope. Nothing is padded or repeated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-record delete, the description covers the action, the outcome (204, no payload) and the auth scope, while annotations carry destructiveness. The one remaining gap is how the agent should discover a valid relationshipIdentifier before calling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75% and 'ref' plus the account/workspace parameters are documented in the schema. 'by identifier' hints that relationshipIdentifier is an opaque ID, but the description never says what form it takes or how to obtain it, and relationshipIdentifier itself is undocumented. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Delete a relationship by identifier'), which is unambiguous and separable from pm_delete_task and pm_create_task_relationship. It doesn't explicitly say how it differs from those siblings, but the verb+resource pair is specific enough to route correctly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites, and no named alternative (e.g. use pm_list_task_relationships to find the identifier first). The only usage signal is implied by the tool name and the word 'delete'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_delete_teamA
Destructive
Inspect

Delete a team. Removes the team and all of its grants — existing access controls that referenced this team are reduced accordingly. Returns 204. Requires the workspace MANAGE_TEAMS permission. API-key scope: teams:write.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
identifierYesTeam identifier (team_…)

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and idempotentHint=false, but the description adds substantive detail beyond them: which related objects are destroyed (all grants), the downstream effect on existing access controls, the 204 response, and the required auth scope. That is exactly the behavior an agent needs before executing an irreversible operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with the action and the destructive consequence before the response code and auth requirements. Every sentence carries distinct, actionable information with no repetition of the annotations or schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description supplies the return code (204), the full blast radius of the deletion, and the authorization prerequisites. For a destructive three-parameter tool this covers 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the identifier, account, and workspace parameters are fully documented in the schema itself, establishing a baseline of 3. The description adds no parameter-level guidance (e.g., how to obtain a team_… identifier via pm_list_teams), so it does not exceed that baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ("Delete a team") and immediately scopes it with the cascade effect on grants and access controls. It is unmistakable against siblings like pm_update_team, pm_get_team, or pm_remove_team_member without needing to open any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear applicability context: the MANAGE_TEAMS permission gate and the `teams:write` API-key scope tell the agent exactly when the call is permissible, and the cascade warning signals the operational stakes. It stops short of naming alternatives or explicit when-not-to-use conditions (e.g., removing members instead of deleting the team), which keeps it from a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_delete_time_entryA
Destructive
Inspect

Delete a time entry from a task. NOTE: timeEntryId is a numeric Long (e.g. 42), NOT a slug/identifier. Returns 204 on success. API-key scope: time:write.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
timeEntryIdYesNumeric time-entry id (Long)
taskIdentifierYesTask identifier (tsk_…)

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and idempotentHint=false. The description adds what annotations cannot: a 204 success status and the required API-key scope `time:write`, both of which materially affect call planning. It omits whether removal is reversible or how task totals are affected.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with the action, then the common failure mode, the return code, and the auth scope. No filler or hedging.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive single-record delete with no output schema, the description covers the success signal and permission scope that an agent needs. Missing only irreversible-effect details, which keeps it from 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all four parameters, including timeEntryId as a numeric Long. The description's NOTE reinforces that constraint with an example, which helps but mostly repeats structured data, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource and scopes it ('Delete a time entry from a task'), which cleanly separates it from creation-oriented siblings like pm_log_time. It stops short of naming the alternative directly, so 4 rather than 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It never says when to reach for this rather than pm_log_time, pm_list_time_entries, or a task-comment delete, and there is no guidance about confirmation or prerequisites. The ID-format note is parameter advice, not usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_delete_viewA
Destructive
Inspect

Delete a view by identifier. Mandatory views (system-created defaults) return 409 Conflict. Returns 204 on success. API-key scope: views:write.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
identifierYes

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, non-idempotent, and open-world, so the description correctly does not restate the safety profile. It instead adds real value: mandatory system-created views fail with 409 Conflict, success returns 204, and the required API-key scope is `views:write`. It stops short of saying what happens to content or whether deletion is cascading or reversible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with the action front-loaded, then the failure mode, then the success code and auth scope. Every sentence carries information an agent needs; nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive single-resource delete with no output schema, the description covers the critical pieces: the failure mode for protected entities, the success status, and the permission scope. Missing only are consequences (cascading effects, reversibility) and clarity on the identifier format, which keeps it just short of complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%: the account and workspace parameters carry detailed descriptions. The `identifier` parameter has no schema description, and the description adds only the words 'by identifier', which does not explain whether it is a view name, numeric id, or slug. Minimum-viable, but the one gap lands on the required parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Delete a view by identifier'), which is clearly distinct from sibling mutations like pm_delete_saved_filter, pm_delete_list, and pm_update_view. It does not explicitly name any sibling, but the resource noun is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance on when to call this versus pm_delete_saved_filter, pm_delete_list, or when to use pm_update_view instead. The 409 behavior for mandatory views is a constraint, not an alternative-selection rule. Usage is only implied by the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_delete_webhookA
Destructive
Inspect

Delete a webhook subscription permanently. Stops all future deliveries. Returns 204. The HMAC secret cannot be recovered — recreate the webhook to get a new one. API-key scope: webhooks:write.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
webhookIdentifierYesWebhook identifier

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=false, and the description still earns credit by naming concrete consequences: future deliveries stop, the HMAC secret is unrecoverable, the response is 204, and the required `webhooks:write` scope. That is real value beyond the annotation flags, though downstream effects on delivery history/audit are unstated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences, front-loaded with the destructive action, then consequences, then auth scope. No filler and nothing buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive 3-parameter mutation with no output schema, the description covers permanence, side effects, the 204 return, credential loss, and the auth scope. An agent has everything needed to call it safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description says nothing further about webhookIdentifier — not whether it is an ID versus a name, nor how to discover it (pm_list_webhooks).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Delete a webhook subscription permanently" states a specific verb and resource, and the permanence qualifier separates it from pm_update_webhook or pm_get_webhook in the sibling list. An agent knows exactly which operation this is.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The note that you must "recreate the webhook to get a new one" implies the alternative (pm_create_webhook) after deletion, but the description never explicitly says when to delete versus update or inspect first. Usage context 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.

pm_describe_status_priority_level_endpointsA
Read-onlyIdempotent
Inspect

Orientation/meta tool: return the canonical REST paths and field shapes for managing the Status, Priority, and Task-Level catalogues at each scope (workspace / space / folder / list). Call this ONCE before reaching for endpoint-example tools — it cuts a 30-tool surface down to a single readable map. The agent can then use the catalog tools (e.g. get_endpoint_examples) to fetch real request/response bodies for whichever path it picks.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower. The description adds real behavioral context: it is a meta/orientation call that should be made once, and it reduces a 30-tool surface to a single map. It does not describe the shape of the returned map (e.g. grouping key) in any detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the meta-tool framing and the 'call once' instruction before the follow-up pointer. Three sentences with only mild salesmanship ('cuts a 30-tool surface down'), no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description must carry the return-value burden; it does so at a high level ('canonical REST paths and field shapes'). An agent knows what it gets and how to chain into `get_endpoint_examples`, though the exact result structure is not specified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the two parameters (account, workspace) are fully documented in the schema itself. The description adds nothing about them, which is acceptable given full schema documentation but earns only the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: returns canonical REST paths and field shapes for the Status, Priority, and Task-Level catalogues across scopes. It explicitly positions itself as an orientation/meta tool distinct from the endpoint-example tools an agent would otherwise reach for.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit sequencing guidance: 'Call this ONCE before reaching for endpoint-example tools', followed by the named alternative (`get_endpoint_examples`) and the condition under which to use it. When-to-use and what-to-use-next are both spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_get_automationA
Read-onlyIdempotent
Inspect

Fetch a single automation by identifier. Returns the full AutomationDTO including triggers, condition tree, and actions. API-key scope: automations:read.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
identifierYesAutomation identifier (auto_…)

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, and non-destructive, so the bar is lower; the description adds the required API-key scope (`automations:read`) and describes the payload shape (triggers, condition tree, actions). It omits behavior for an unknown identifier (error/404) but adds real value 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences: purpose first, return payload second, auth scope last. Nothing is redundant and nothing is buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully names the returned DTO and its key sections, and it discloses the required scope. Minor gap: no mention of what happens when the automation is missing or inaccessible via the workspace/account override.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, including detailed docs for the account and workspace override parameters, so the schema carries parameter semantics. The description only restates that the identifier is an automation identifier, adding no format or format-edge guidance beyond the schema's `auto_…` hint.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Fetch a single automation by identifier') and clarifies cardinality, which implicitly separates it from the pm_list_automations_for_space/list/folder siblings. It does not name an alternative tool, but the singular-by-ID framing is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: retrieve one automation when you already have its identifier, versus the list tools when you don't. No explicit when/when-not statement or named alternative is given, 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.

pm_get_automation_auditA
Read-onlyIdempotent
Inspect

Fetch the execution audit log for an automation. Each row records a single firing — timestamp, triggering task, trigger type, overall execution status (SUCCESS/FAILED/IN_PROGRESS/ROLLED_BACK), and per-action audit detail. Use to debug "did my automation run?" — it is the authoritative answer; the UI does not currently show summary stats. API-key scope: automations:read.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
identifierYesAutomation identifier (auto_…)

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, idempotent, non-destructive, closed-world behavior. The description adds useful behavioral context: each row represents one firing, the possible execution statuses are listed, and API-key scope `automations:read` is disclosed. Minor gaps remain around pagination or log-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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and row structure, then adds usage rationale and scope. It is efficient overall, though the UI summary-stats note is slightly tangential and costs a small amount of space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description carries the return-value burden and does a good job listing row fields and execution statuses. It is nearly complete, but does not mention result volume, pagination, or retention behavior for the audit log.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents account, workspace, and identifier semantics thoroughly. The description only implies the automation identifier via 'for an automation' and adds no additional parameter-level detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: fetch the execution audit log for an automation. It also describes the row contents (timestamp, triggering task, trigger type, status, per-action detail), which clearly distinguishes this from the sibling pm_get_automation configuration tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear usage scenario: debug 'did my automation run?' and calls itself the authoritative answer because the UI does not show summary stats. It does not explicitly name alternatives such as pm_get_automation or state when not to use this tool, 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.

pm_get_current_userA
Read-onlyIdempotent
Inspect

Get the profile of the human behind the API key — identifier, email, fullName, and the userSettings object. Use this when the agent needs to address the user by name, route a notification to the right preference channel, or confirm "whose API key am I holding". API-key scope: users:read.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/closed-world, so the safety profile is covered; the description adds the required API-key scope (`users:read`), which is genuinely useful pre-call context. It does not discuss failure modes (the account-selection error is only in the schema) or response shape beyond the field list.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler: the first front-loads what is returned, the second front-loads when to use it, with the auth scope appended as a terse trailing tag. Well structured and appropriately sized for a simple read tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully names the return fields, and it covers the required scope. For a zero-required-parameter read tool with fully documented params, this is nearly complete; the only minor gap is the lack of any explicit mention of the multi-account selection path surfaced in the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both the `account` and `workspace` parameters (including the ACCOUNT_REQUIRED failure behavior) are fully documented in the schema. The description adds no parameter-level meaning of its own, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Uses a specific verb ('Get') and resource ('profile of the human behind the API key') and enumerates the returned fields (identifier, email, fullName, userSettings). It is clearly distinct from pm_update_current_user by verb, though it never explicitly names that sibling or whoami/find_my_workspace to disambiguate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives three concrete triggering scenarios (address user by name, route a notification to a preference channel, confirm whose API key it is), which is real when-to-use guidance. It stops short of explicit when-not-to-use or naming the alternative tool for identity/workspace lookups.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_get_dashboardA
Read-onlyIdempotent
Inspect

Get aggregated counts and breakdowns (status / priority / assignee distributions, custom-field summaries) for any scope. Useful for "how is project X doing?" questions without paginating through tasks. API-key scope: dashboards:read.

NameRequiredDescriptionDefault
scopeYes
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
scopeIdentifierNoUUID of space/folder/list (omitted for workspace)

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the extra value here is the required API-key scope `dashboards:read`, which is exactly the kind of auth prerequisite an agent needs and cannot get from annotations. It also states the efficiency characteristic (no pagination) and the aggregation dimensions, though it does not describe the shape or nesting of the returned counts.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences: capability first, use case second, auth requirement last. No filler, no repetition of the tool name, and the most decision-relevant content is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the burden of explaining returns, and it does list the breakdown dimensions, which is the key information. It stops short of describing the response's grouping/nesting or whether custom-field summaries require admin permissions, but nothing critical to calling the tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The phrase "for any scope" gestures at the scope enum but adds no semantics beyond it, and nothing explains the scope/scopeIdentifier pairing (that scopeIdentifier is required for space/folder/list and omitted for workspace). With 75% schema description coverage the schema already carries the parameter docs, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource ("Get aggregated counts and breakdowns") and enumerates exactly what is aggregated — status, priority, assignee distributions, custom-field summaries. It implicitly separates itself from task-listing siblings ("without paginating through tasks") but never names an alternative tool such as pm_search_tasks or pm_read_activity_log.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is conveyed through a scenario ("how is project X doing?" questions) and a negative constraint (avoid paginating through tasks), which is genuinely helpful routing. However, no sibling tool is named as the alternative and there is no explicit when-not-to-use guidance, so an agent must infer the boundary itself.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_get_import_jobA
Read-onlyIdempotent
Inspect

Fetch the current status and progress of a CSV import job by identifier. Use this to poll a job that another client started via /csv or /csv/preview. API-key scope: imports:write.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
jobIdentifierYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint and idempotentHint, so the safety profile is clear. The description adds genuinely new context: the required API-key scope (`imports:write`) and the fact that it's meant for polling a job started elsewhere, which matters for auth planning and invocation timing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each earning its place: purpose first, usage second, auth scope last. Nothing is padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description carries some burden to explain return values; saying it returns 'status and progress' is adequate but thin about the shape of that data. For a single-identifier read tool, the rest of the definition 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 67%, with account and workspace well documented in the schema. The description only adds that the job is identified 'by identifier', and jobIdentifier itself has no schema description, so the description compensates marginally. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: fetch the status and progress of a CSV import job by identifier. It's clearly distinguishable from pm_list_import_jobs, though it doesn't name the sibling explicitly to differentiate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear use case: poll a job that another client started via /csv or /csv/preview. That's a strong context signal, though it doesn't state when-not-to-use or point to pm_list_import_jobs as the batch alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_get_notification_settingsA
Read-onlyIdempotent
Inspect

Read the current user's aggregated notification settings — one tree covering every module (comments, mentions, assignments, due dates, automation events, …) and every delivery channel (app / browser / email). Use this to find out which channel is on for a given event before asking the user to flip a flag. API-key scope: users:read.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive behavior, so the safety profile is covered. The description adds useful behavioral context beyond annotations by disclosing the API-key scope `users:read` and clarifying that the result is an aggregated tree across modules and channels.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and resource, then gives the usage rationale and auth scope. It is compact and every sentence carries useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only getter with rich schema descriptions and clear annotations, the description covers purpose, usage context, aggregation scope, and auth requirements. No output schema exists, but the description sufficiently conveys the shape of the result as a tree spanning modules and channels.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and both `account` and `workspace` are fully described in the schema. The description does not add any parameter-specific meaning beyond what the schema already provides, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: reading the current user's aggregated notification settings. It also scopes the resource clearly as one tree covering every module and delivery channel, which lets an agent distinguish it from notification-listing or channel-update siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a concrete usage context: use this to find out which channel is on for an event before asking the user to flip a flag. It does not explicitly name the alternative write tool or state when not to use this tool, so it stops short of full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_get_sprintB
Read-onlyIdempotent
Inspect

Fetch a sprint by identifier. Returns SprintDTO with task statistics. API-key scope: sprints:read.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
sprintIdentifierYes

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive behavior, so the description's added value is the required API-key scope `sprints:read` and the shape of the returned DTO — both are genuine context an agent needs before calling. Missing only detail on error behavior for unknown identifiers.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with the operation front-loaded and no filler. 'SprintDTO' is internal type jargon that adds little for an agent, but the text is otherwise tight and well-ordered.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description naming SprintDTO and task statistics is helpful but leaves the actual fields unenumerated, and it never specifies the identifier format or failure mode for a missing sprint. Adequate for a simple single-entity read, but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 67%: `account` and `workspace` are well documented inline, but `sprintIdentifier` has no schema description at all. The description contributes only 'by identifier' and does not clarify whether that means a numeric ID, key, or exact name, leaving the one undocumented parameter ambiguous.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Fetch a sprint by identifier') and names the return payload with its salient content ('SprintDTO with task statistics'). It does not differentiate itself from the closely related pm_get_sprint_tasks and pm_get_sprint_burndown, which an agent could easily confuse for this.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance on when to call this versus the sprint siblings: pm_get_sprint_tasks exist to list tasks and pm_get_sprint_burndown returns burndown. The single-sprint-entity reading is inferable from 'by identifier', but nothing states prerequisites or exclusion conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_get_sprint_burndownA
Read-onlyIdempotent
Inspect

Return burndown/burnup chart data for the sprint — daily snapshots of remaining vs completed work. Use this to render burndown charts or audit sprint progress over time. API-key scope: sprints:read.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
sprintIdentifierYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds real value beyond that: the required API-key scope `sprints:read` and a characterization of the returned data as daily snapshots. It doesn't cover pagination or time-range behavior, keeping 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, front-loaded with the what and followed by the when, with the auth scope appended compactly. No filler sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with one required parameter and no output schema, the description supplies the data shape and the auth scope an agent needs. The main residual gap is how the required sprintIdentifier should be formed and whether any time-window options exist.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%: the account and workspace parameters are well documented in the schema, but sprintIdentifier has no description there, and the description only implies it via 'for the sprint'. The description adds no format or acceptance details (ID vs key vs name) for the required parameter, leaving a gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (return chart data) and resource (sprint burndown/burnup), and clarifies the payload is daily snapshots of remaining vs completed work. That distinguishes it from sibling pm_get_sprint, which returns the sprint entity itself rather than time-series progress data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states clear usage contexts — rendering burndown charts or auditing progress over time — which tells an agent when this tool is appropriate. It stops short of naming an explicit alternative or exclusion (e.g., use pm_get_sprint for metadata), so it's not quite top-tier.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_get_sprint_tasksA
Read-onlyIdempotent
Inspect

List all tasks currently in the sprint. Returns an array of full TaskDTO. API-key scope: sprints:read.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
sprintIdentifierYes

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description adds genuine new context: the required API-key scope `sprints:read` and the return shape ('array of full TaskDTO'). It does not disclose ordering, pagination behavior on large sprints, or whether completed/cancelled tasks are included.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with zero waste: behavior first, return type second, auth scope last. Nothing is redundant and the most decision-relevant fact (what is listed) is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description's 'array of full TaskDTO' leaves the actual field set unknown, and the required sprintIdentifier format remains undefined. The auth-scope note is helpful, but for a 3-parameter tool with a 67% schema coverage gap the description does not fully close the loop.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67% and the two well-documented parameters (account, workspace) are already explained in the schema, so the description adds nothing there. The one undocumented parameter is the required `sprintIdentifier`, and the description does not clarify whether it accepts an ID, key, or exact name — the single most important semantic an agent needs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource+scope: 'List all tasks currently in the sprint', which is unambiguous and distinguishes it from task-fetching tools like pm_get_task (single task) and pm_search_tasks (query-based). It stops short of naming a sibling or clarifying boundaries explicitly, so it is clear but not fully differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use guidance, no exclusions, and no named alternative. An agent must infer from 'currently in the sprint' alone that this is for sprint-scoped enumeration rather than pm_search_tasks or pm_get_task, and nothing tells it what a sprint must contain or whether completed sprints are valid targets.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_get_subtasksB
Read-onlyIdempotent
Inspect

List the direct subtasks (one level deep) of a parent task by ref. API-key scope: tasks:read.

NameRequiredDescriptionDefault
refYesParent task key or identifier
limitNo
cursorNo
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this as a safe, idempotent read. The description adds useful context that it returns only one level deep and requires the tasks:read API scope, but it omits pagination behavior, ordering, and return-shape details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The definition is front-loaded and compact: one sentence for the operation and one for the API-key scope. Every sentence carries useful information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list endpoint with annotations covering safety, the core purpose is clear. Still, with five parameters and no output schema, the undefined limit/cursor semantics and missing usage alternatives leave gaps for an agent calling it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 60%, with limit and cursor undocumented in both schema and description. The description says 'by ref' and clarifies the ref is a parent task, but adds no meaning for the pagination parameters or the account/workspace context beyond the schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: list direct subtasks of a parent task, with the important one-level-depth scope. It is clearly distinguishable from broader task-fetching tools, though it does not explicitly name a sibling alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: call this when you have a parent task ref and need its immediate children. However, it does not say when to prefer this over pm_get_task, pm_search_tasks, or relationship-listing tools, and gives no exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_get_tagA
Read-onlyIdempotent
Inspect

Fetch a single tag by identifier. Returns the TagDTO (identifier, name, backgroundColor, textColor). API-key scope: tags:read.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
identifierYesTag identifier (tag_…)

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds real value beyond that: it specifies the returned DTO shape and the required API-key scope `tags:read`, which is an authorization prerequisite not encoded anywhere else.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with zero padding: purpose first, then return shape, then the auth scope. Every sentence carries information the agent can act on.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-resource read with full schema coverage and no output schema, the description supplies the return fields and the required scope, which is what an agent needs to call it correctly. It omits not-found or error behavior, a minor gap for this tool class.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters (account, workspace, identifier) are already documented in the schema itself. The description only restates that the lookup is by identifier, adding no format, prefix, or error-handling detail beyond the schema's `tag_…` hint.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb (fetch) and a single-resource scope (a single tag by identifier), which is clearly distinguishable from mutation siblings like pm_create_tag or pm_update_tag. It does not explicitly say how it differs from listing tools such as pm_list_reference_data, so it stops short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the requirement for a tag identifier: call it when you already know which tag you want. There is no explicit when-to-use, when-not-to-use, or pointer to an alternative for listing or searching tags, 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.

pm_get_taskA
Read-onlyIdempotent
Inspect

Fetch a task by ref. Ref accepts a system identifier (tsk_…) OR a task key (e.g. 'PROJ-42'). Returns LiteTaskResponse with names instead of UUIDs and emails instead of user UUIDs. Internal note: when ref is a task key the workspace query param is required — the MCP injects it automatically. Present title linked to webUrl; show displayKey only when non-empty. Do not display the raw key when displayKey is null or absent. API-key scope: tasks:read.

NameRequiredDescriptionDefault
refYesTask key (PROJ-42) or identifier (tsk_…)
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the readOnly/idempotent annotations: it names the return type (LiteTaskResponse), explains that names and emails replace UUIDs, discloses the otherwise-invisible behavior that the MCP injects the workspace param for key refs, and states the required API-key scope (tasks:read). Those are exactly the non-obvious traits 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and ref semantics, and the internal note is compact. The trailing presentation rules (link title to webUrl, suppress raw key when displayKey is null) are useful but renderer guidance rather than invocation info, slightly diluting focus.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does a solid job of summarizing the return shape (LiteTaskResponse, resolved names/emails) and the auth scope. What is missing is error behavior (e.g. invalid ref or missing workspace) and whether the ambient workspace setting matters for identifier refs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so the schema carries ref/account/workspace. The description still adds value by pairing the ref formats with the conditional workspace requirement ('when ref is a task key the workspace query param is required'), which clarifies a real interaction between two params.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ("Fetch a task by ref") and clarifies that ref accepts either a system identifier (tsk_…) or a human task key (PROJ-42). Clear enough for an agent to pick this for single-task retrieval. It stops short of naming the sibling it competes with (e.g. pm_search_tasks) or explicitly contrasting the two ref formats with use contexts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Use is implied by the single-task fetch verb and the two accepted ref formats. The internal note about workspace being auto-injected when ref is a key is helpful preconditioning, but there is no explicit 'use this instead of X' routing versus pm_search_tasks or pm_get_subtasks.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_get_task_sharingA
Read-onlyIdempotent
Inspect

Read a task's current public sharing settings. Returns the full TaskSharingSettingsDTO — shared (is the public link active), publicLink (the share URL when active), expiresAt, and per-field visibility toggles (shareAssignee, shareDescription, shareStatus, sharePriority, shareDueDate, shareComments, shareAttachments, shareCustomFields, shareSubtasks, shareTags) plus the explicit list of custom-field identifiers exposed (sharedCustomFieldIdentifiers). Requires at least VIEW access to the task. API-key scope: tasks:read.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
taskIdentifierYesTask identifier (tsk_…) or short key (e.g. "PROJ-42")

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive behavior, and the description adds meaningful context by stating the required VIEW access level, API-key scope, and the full returned settings shape. It stops short of covering error behavior or rate limits, so 4 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core read action and then spends the remaining words on return fields, which is justified because no output schema exists. The long field enumeration is necessary rather than repetitive, though the response remains a single dense paragraph.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description fully explains the returned TaskSharingSettingsDTO fields and the access/scope requirements an agent needs. The input schema is complete and annotations cover safety, so no critical context is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with all three parameters documented directly in the schema, so the baseline is 3. The description adds no input-parameter formatting or selection guidance beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Read') and resource ('task's current public sharing settings'), and the detailed DTO return list makes the operation unambiguous. It does not explicitly name or contrast with the write sibling pm_configure_task_sharing, 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides an access prerequisite ('Requires at least VIEW access') and API-key scope ('tasks:read'), which tells the agent when the call is permitted. However, it never explicitly says when to use this instead of pm_configure_task_sharing or another alternative, leaving the read-vs-configure distinction implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_get_teamA
Read-onlyIdempotent
Inspect

Fetch a team by identifier. Returns the full TeamDTO with members. API-key scope: teams:read.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
identifierYesTeam identifier (team_…)

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish the safe read-only, idempotent, non-destructive profile, so the description is not burdened there. It adds genuinely new context: the required API-key scope `teams:read` and the fact that the payload is a full TeamDTO including members — the latter matters because no output schema exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, with the action and scope front-loaded before the return-value and auth details. Every clause carries information an agent would otherwise have to guess.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With three parameters (two optional, well documented in schema) and no output schema, the description supplies the two things the structured data cannot: the return shape (full TeamDTO with members) and the required auth scope. The only gap is guidance on sourcing the identifier and relating it to pm_list_teams.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including detailed notes on the optional `account` and `workspace` parameters, so the schema carries the full parameter burden. The description only echoes that the identifier is a team identifier, adding no format or behavioral detail beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Fetch a team by identifier") and scopes it to a single entity via an identifier, which implicitly separates it from pm_list_teams. It stops short of naming that sibling or any other team-related tool, so the differentiation is inferable rather than explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied — an agent must infer that this is the right tool when it already has a team_… identifier rather than needing to enumerate teams. There is no explicit statement of when to prefer this over pm_list_teams, and no mention of how to obtain an identifier.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_get_viewA
Read-onlyIdempotent
Inspect

Fetch a view by identifier (vw_…). API-key scope: views:read.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
identifierYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered by structured data. The description adds the required API-key scope (`views:read`), which is useful auth context, but says nothing about behavior on an unknown or foreign-workspace identifier.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the identifier format and the required scope front-loaded and nothing redundant. Every clause carries information the agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only lookup with full annotations this is close to sufficient, but with no output schema the agent gets no hint about what a view object contains or whether a missing ID errors versus returns empty. A brief return/error note would close the gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The account and workspace parameters are documented in the schema (67% coverage), and the description adds the one thing the schema omits: the `vw_…` format of `identifier`. That is a real semantic gain, but it does not clarify identifier scope (workspace-bound vs global) or the account/workspace interaction.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Fetch) and resource (a view) plus the identifier form (vw_…), so the agent knows exactly what it retrieves. It does not distinguish itself from pm_list_views or pm_update_view, but the singular-by-ID framing makes the distinction inferable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"by identifier" implies this is the single-object lookup used once you already have an ID rather than for discovery, which is genuine but unstated usage guidance. There is no explicit when-to-use/when-not and no mention of pm_list_views as the alternative for enumerating views.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_get_webhookA
Read-onlyIdempotent
Inspect

Fetch a single webhook by identifier. Returns its url / name / eventTypes / scope / active flag; does NOT return the HMAC secret (only available at creation time). API-key scope: webhooks:read.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
webhookIdentifierYesWebhook identifier

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the read-only/idempotent/non-destructive profile, so the bar is lower; the description still adds real value by enumerating returned fields (url, name, eventTypes, scope, active) and warning that the HMAC secret is excluded and only exists at creation time. The required auth scope is also disclosed. No pagination or error behavior, but none is material for a single-resource fetch.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with purpose, then return shape, then the one caveat an agent must know. Zero filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates by listing the returned field set and the notable omission (secret). Combined with the explicit auth scope, an agent has enough to call it and interpret the result; only identifier-format ambiguity remains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters including the account/workspace resolution rules are documented structurally. The description adds nothing about the identifier format (id vs name) or about the account/workspace overrides, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource with an explicit scope: 'Fetch a single webhook by identifier.' The word 'single' plus the identifier requirement distinguishes it from pm_list_webhooks and pm_list_webhook_deliveries without the agent needing to open a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the required identifier, and the API-key scope `webhooks:read` is a useful precondition. However, it never names an alternative (pm_list_webhooks, pm_get_webhook_usage, pm_update_webhook) or states when not to call it, so 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.

pm_get_webhook_usageA
Read-onlyIdempotent
Inspect

Report webhook quota for the current workspace: { userManaged, agentManaged, total, max }. total is the count of active subscriptions and max is the per-workspace cap; agentManaged is the subset created via API keys (like this MCP). Check this before calling pm_create_webhook in bulk — creation fails once total reaches max. API-key scope: webhooks:read.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/idempotentHint/non-destructive, so safety is covered; the description adds meaning beyond that by defining each counter's semantics (total = active subscriptions, max = per-workspace cap, agentManaged = subset created via API keys) and the authorization scope `webhooks:read`. It also discloses the downstream failure behavior when the cap is reached.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The return shape is front-loaded in the first sentence, followed by field definitions, the motivating usage note, and the auth scope — each sentence adds distinct information with no repetition. Dense but well-ordered for a tool this small.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by spelling out the returned object's fields and their meaning, and it covers the pre-condition for the related write tool plus the required API-key scope. 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the account and workspace parameters are fully documented in the schema itself, including multi-account failure behavior and workspace override semantics. The description adds nothing about either parameter, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (report) and resource (webhook quota) for the current workspace, then enumerates the exact returned fields { userManaged, agentManaged, total, max }. This clearly distinguishes it from pm_get_webhook (single webhook detail) and pm_list_webhooks (enumeration), so an agent can pick it without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger condition: 'Check this before calling pm_create_webhook in bulk — creation fails once total reaches max.' That names the sibling tool and the failure mode that motivates calling this one first, which is exactly the routing guidance an agent needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_get_workspace_contextA
Read-onlyIdempotent
Inspect

Single-call workspace orientation: members, spaces (with folders, lists, per-list statuses/priorities/taskTypes/customFields), workspace-level taskTypes, relationshipTypes, tags. The biggest agent-onboarding tool — call it first when starting in a new workspace. Pass shallow=true to skip per-list statuses/priorities for a faster tree-only response. Each per-list custom field carries an isMandatory flag — fields with isMandatory=true MUST be supplied in customFields when creating/updating a task in that list, or the write is rejected with 400 VALIDATION_ERROR. API-key scope: workspaces:read.

NameRequiredDescriptionDefault
spaceNoNarrow to one space by name (exact match)
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
shallowNoSkip per-list statuses/priorities (faster)
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
includeTagsNoDefault true
includeTaskTypesNoDefault true
includeCustomFieldsNoDefault true
includeRelationshipTypesNoDefault true

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/idempotent annotations, the description adds the API-key scope (`workspaces:read`), the shallow tradeoff, and the important mutation constraint that isMandatory custom fields must be supplied or writes fail with 400 VALIDATION_ERROR. These are concrete behavioral details an agent could not infer from annotations or schema alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but front-loaded: it establishes the tool's purpose and onboarding role first, then covers shallow behavior, mandatory custom fields, and auth scope. Every sentence contributes operational information, with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although no output schema exists, the description enumerates the returned workspace structure, explains the shallow mode, notes mandatory custom-field validation, and states the required API-key scope. That is sufficient for an agent to call and interpret this orientation tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all eight parameters are already documented, including shallow, account, workspace, and the include* flags. The description reinforces shallow's effect as a tree-only response but otherwise adds limited parameter-specific meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: single-call workspace orientation returning members, spaces, folders, lists, statuses, priorities, task types, custom fields, relationship types, and tags. It clearly distinguishes itself from sibling list tools as the broad onboarding call, and the phrase 'call it first when starting in a new workspace' leaves no ambiguity about its role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit usage context: call first when starting in a new workspace, and use shallow=true for a faster tree-only response. It does not explicitly exclude alternatives or name which tool to use when shallow is insufficient, but the onboarding guidance is strong enough for an agent to select it correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_get_workspace_user_avatar_urlA
Read-onlyIdempotent
Inspect

Return the avatar URL for a specific user in the current workspace. The response is a short-lived signed URL pointing at the user's avatar image — embed it in chat messages, mentions, or attribution UI. Returns null if the user has no avatar set. API-key scope: users:read.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
userUuidYesUser UUID from pm_list_workspace_members
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only/idempotent/non-destructive, and the description adds real behavioral context beyond them: the URL is short-lived and signed (so it should not be cached), the call returns null when no avatar exists, and it requires the `users:read` API-key scope. Only missing items would be rate limits or failure modes on invalid UUIDs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, each carrying distinct information (what it returns, what the URL is, the null case, the required scope), with the core action front-loaded. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must convey return values, and it does: a signed URL string or null. Combined with the scope requirement and the pointer to pm_list_workspace_members for the UUID, 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with the schema itself explaining account selection, workspace override, and the userUuid origin, so the baseline is 3. The description adds no parameter-level detail beyond reiterating which user is targeted, so it neither compensates nor detracts.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (return the avatar URL for a specific user in the current workspace) and is unmistakable against siblings like pm_list_workspace_members or pm_get_current_user. The scope (avatar image URL, not profile data) is precise enough to select the 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete usage context — embed in chat messages, mentions, attribution UI — and the userUuid parameter points to pm_list_workspace_members as the source of the identifier. It stops short of stating when NOT to use it (e.g. use pm_get_current_user for the caller's own profile), so it is clear but not fully routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_leave_workspaceA
Destructive
Inspect

Voluntarily leave the current workspace. WARNING: this affects the calling user (the user identity behind the API key) — there is no parameter to pick a different user. The workspace owner cannot leave; they must transfer ownership first. After a successful leave the API key may stop working against this workspace. No body. API-key scope: workspaces:write.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations already marking this as destructive and open-world, the description adds critical behavioral context: the API key may stop working after a successful leave, the call always targets the calling user, and the owner cannot leave without transferring ownership. This goes far 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five sentences, front-loaded with the core action and a warning, then constraints. Every sentence carries necessary information: scope, user targeting, owner restriction, API key consequence, and request body note.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive workspace-leave operation with no output schema, the description covers the essential risks and prerequisites: caller identity, owner restriction, post-leave API key behavior, and required scope. An agent has enough to invoke it safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the account and workspace parameters are already well documented. The description adds only peripheral information ('No body', 'no parameter to pick a different user') without explaining the actual parameters further, matching the baseline for high-coverage schemas.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Voluntarily leave the current workspace') and immediately clarifies the scope ('affects the calling user... no parameter to pick a different user'), which distinguishes it from sibling tools like pm_remove_workspace_member. The owner restriction further sharpens the purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear usage context: this is for voluntary self-removal, not for removing others, and the workspace owner must transfer ownership first (implying pm_transfer_workspace_ownership). However, it does not explicitly name alternatives or state when-not to use it beyond the owner case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_list_automations_for_folderA
Read-onlyIdempotent
Inspect

List automations scoped to a folder. Automations attached at folder level cascade to every list inside that folder unless overridden at the list level. API-key scope: automations:read.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
folderIdentifierYesFolder identifier (fld_…)

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds specific behavioral details about API access control (API-key scope: `automations:read`), which is valuable context for a client agent. Since annotations are already provided (e.g., `readOnlyHint: true`), the description adds significant, non-redundant value regarding access rights.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The two sentences are highly efficient. They front-load the core function and immediately follow with a crucial, advanced behavior (cascading logic), maximizing the information density without unnecessary padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the functional logic (listing automations) and the behavioral logic (cascading scope). While it doesn't mention return format or pagination, the annotations and schema fully cover the necessary operational details for invoking the tool correctly, making it nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, meaning all parameter details are covered in the schema. The description adds no additional meaning beyond what the structured data already provides for parameters, thus meeting the baseline score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the purpose: to list automations scoped specifically to a folder. The phrasing 'scoped to a folder' distinguishes it immediately from sibling tools like `pm_list_automations_for_list` and `pm_list_automations_for_space`.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes critical usage context by explaining the 'cascading' behavior of folder-level automations. This tells the AI exactly *when* it will see certain automations (and thus, when it won't) based on where it is operating relative to the list level.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_list_automations_for_listA
Read-onlyIdempotent
Inspect

List automations scoped to a specific list. Each row is an AutomationDTO with name, active, triggers, conditionNodes, actions, and the owning scope identifiers. API-key scope: automations:read.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
listIdentifierYesList identifier (tl_…)

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds genuinely new context: the required API-key scope `automations:read` and the shape of the returned AutomationDTO rows, neither of which is 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences with zero filler, front-loaded with the purpose and followed immediately by the payload shape and auth requirement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by naming the returned DTO fields (name, active, triggers, conditionNodes, actions, scope identifiers), and it covers the auth requirement. Nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and all three parameters are documented in the schema, including the account/workspace override semantics. The description adds no parameter-level detail beyond noting the list scoping, so the documented baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (automations) plus an explicit scope constraint ('scoped to a specific list'), which is exactly what separates it from the sibling pm_list_automations_for_folder and pm_list_automations_for_space tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The list scoping implies when to use it, but the description never names the folder/space siblings or states an exclusion, so an agent must infer the routing decision rather than read it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_list_automations_for_spaceA
Read-onlyIdempotent
Inspect

List automations scoped to a space. Automations attached at space level cascade to every list and folder inside that space. API-key scope: automations:read.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
spaceIdentifierYesSpace identifier (sp_…)

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuine context beyond that: the inheritance behavior ('cascade to every list and folder') and the required API-key scope `automations:read`, which is exactly the kind of auth precondition annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action and scope, then the cascade semantics, then the required scope. Nothing redundant and nothing buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with full schema coverage and rich annotations, the description covers purpose, inheritance semantics and auth scope. It omits return shape and any pagination/limit behavior, which matters slightly since there is no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and all three parameters (account, workspace, spaceIdentifier) are documented in the schema, so the baseline is 3. The description adds the concept of space scoping but no format or selection detail beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List automations') plus the scope ('scoped to a space'), which implicitly separates it from pm_list_automations_for_folder and pm_list_automations_for_list. It never names those siblings explicitly, so differentiation relies on the reader inferring the space/folder/list axis.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use or when-not guidance and no named alternatives, but the scope statement plus the cascade note implies the use case (enumerating space-level automations). An agent still has to infer that folder- and list-level automations live behind the sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_list_comment_reactionsA
Read-onlyIdempotent
Inspect

List reactions on a task comment. Page-style pagination (page/size). API-key scope: tasks:read.

NameRequiredDescriptionDefault
pageNo
sizeNo1–100
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
taskIdentifierYesTask identifier (tsk_…)
commentIdentifierYesComment identifier (cmt_…)

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive behavior, and the description adds two pieces of context not in annotations: the required `tasks:read` API-key scope and the page/size pagination model. That is genuine value beyond structured fields, though return shape and default sizes are unstated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short, front-loaded sentences covering purpose, pagination, and auth scope. No filler or redundancy; each sentence carries distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with strong annotations, 83% schema coverage, and no output schema, the description covers purpose, pagination style, and scope requirement. Only minor gaps remain (default page size, whether reactions include user info).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 83%, so the schema already documents most parameters in detail (including the 1–100 size bound). The description's 'page/size' note adds only a light hint that these form a pagination pair, which the schema already implies. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description specifies a concrete verb and resource ('List reactions on a task comment'), which is distinguishable from its sibling mutation tools pm_add_comment_reaction and pm_remove_comment_reaction. It doesn't explicitly name those siblings, but the read semantics are unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'List reactions on a task comment' and the required taskIdentifier/commentIdentifier pair, but there is no explicit guidance on when to prefer this over related tools or what preconditions exist beyond the API-key scope. Adequate but not instructive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_list_import_jobsA
Read-onlyIdempotent
Inspect

List CSV import jobs for the current workspace, paginated. The actual CSV upload endpoints (/csv and /csv/preview) are multipart/form-data and are not exposed by the MCP — agents that want to start a fresh import must upload via a non-MCP client and then come back here with the returned jobIdentifier. API-key scope: imports:write.

NameRequiredDescriptionDefault
pageNo0-indexed page (default 0)
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
pageSizeNoPage size (default 20)
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only/idempotent/non-destructive, so the description's added value is the workflow constraint and the `imports:write` scope requirement, both of which are genuinely beyond structured data. The scope line is notable for a list operation and worth flagging, but it does not contradict the annotations, which describe side effects rather than OAuth scopes. Minor gap: no mention of pagination limits or response shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, zero filler, and the core operation is front-loaded before the caveat. Each sentence contributes something distinct: what it lists, what is unavailable, and what scope is required.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, yet the description at least implies a jobIdentifier is part of a job record, which is the key field an agent needs to chain into pm_get_import_job. What is still missing is any hint of job status values or what pagination metadata comes back, which matters for a polling-style workflow.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so page, pageSize, workspace, and account are already fully documented in the schema. The description adds no parameter detail — no default page size, no guidance on when to pass workspace versus the configured one. Baseline 3 is correct when the schema carries the whole burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource with scope: 'List CSV import jobs for the current workspace, paginated.' An agent immediately knows what it returns. It stops short of naming pm_get_import_job as the single-job sibling, so sibling differentiation is only implied by 'come back here with the returned jobIdentifier.'

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells the agent what it cannot do here (CSV upload endpoints are multipart and not exposed) and prescribes the workaround: upload via a non-MCP client, then return with the jobIdentifier. That is real routing guidance. It never states the inverse case — use pm_get_import_job for a single job's status — so the alternative is inferred, not named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_list_invitationsA
Read-onlyIdempotent
Inspect

List pending (not yet accepted, not expired) invitations for the current workspace. Caller needs MANAGE_USERS permission. Returns an array of InvitationDTO. API-key scope: users:read.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/idempotentHint/non-destructive, so safety is covered. The description adds what annotations cannot: the exact filter semantics (excludes accepted and expired invitations), the authorization requirement, and the API-key scope.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences: purpose and filter first, then permission, then return type and scope. No filler and nothing buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose, precise inclusion criteria, permission, auth scope, and the return type (array of InvitationDTO) in the absence of an output schema. Minor gap: it does not say whether results are ordered or bounded, though the tool exposes no pagination parameters to clarify.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with account and workspace fully documented in the schema, so the description does not need to repeat them. It adds nothing beyond the schema—no note on how the account/workspace selection interacts with this workspace-scoped listing—so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (list), resource (invitations), and a precise scope: pending = not yet accepted and not expired, for the current workspace. That definition alone separates it from pm_send_invitation and pm_cancel_invitation, which act on the same object.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the caller prerequisite (MANAGE_USERS permission) and the API-key scope needed (users:read), which tells an agent up front whether it can call this. It stops short of naming alternatives (e.g., listing workspace members via pm_list_workspace_members, or canceling via pm_cancel_invitation), so routing is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_list_notificationsA
Read-onlyIdempotent
Inspect

List notifications for the current user in the active workspace. NOTE: this endpoint uses PAGE-style pagination (?page=&size=) not cursor-based — unusual for this API. page is 0-indexed; size is 1–100. Optional unreadOnly, sortColumn, sortDirection. API-key scope: notifications:read.

NameRequiredDescriptionDefault
pageNo0-indexed page number
sizeNo1–100
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
sortColumnNo
unreadOnlyNo
sortDirectionNoe.g. 'asc' or 'desc'

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive, closed-world, so the safety bar is met. The description adds genuinely useful non-structured context: the endpoint uses page-style pagination rather than the API's usual cursor style, and the required API-key scope `notifications:read`. It omits return shape and any rate-limit behavior, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences front-loading scope, then the pagination caveat, then auth scope. Every clause carries actionable information and nothing is padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter read-only list tool with no output schema, the definition covers the risky parts (pagination semantics, auth scope, optional filters). It could still say what a notification record contains or how to detect the last page, but nothing critical to a correct call is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 71%, just under the threshold where the schema would carry it alone. The description restates `page` 0-indexed and `size` 1–100 (already in the schema) and lists `unreadOnly`/`sortColumn`/`sortDirection` without explaining them — notably `sortColumn` has no schema description and no allowed values, so a real semantics gap remains.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence gives a specific verb and resource plus scope ('for the current user in the active workspace'), which is enough to distinguish it from write-side notification siblings. It doesn't explicitly contrast with pm_count_unread_notifications, which is the nearest ambiguous neighbor, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the scope statement and the `unreadOnly` mention, and the pagination NOTE helps an agent call it correctly. But there is no explicit when-to-use/when-not guidance or named alternative (e.g. count_unread vs list).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_list_reference_dataA
Read-onlyIdempotent
Inspect

List a Dutify reference-data enum (status types, custom-field types, view types, automation action/condition types, access levels, etc.). Returns the authoritative set of values the backend accepts — call this BEFORE guessing enum strings on a create/update payload to avoid 400s. Categories:

  • custom-field-types: Custom-field type catalogue: text, number, dropdown, date, money, file, rollup, formula, … Use the identifier from each row as the fieldType value when creating a custom field via /v1/lists/{id}/custom-fields or pm_create_custom_field.

  • custom-field-icon-options: Custom-field icon catalogue: supported iconNames, emojiNames, and defaultIconsByFieldType. Use one of these keys as the emoji value; keep custom-field names plain. Agent preference: choose a semantically matching emojiNames key when available (severity/urgency=fire, target/goal=direct_hit, launch=rocket, approval/success=white_check_mark, location=pushpin, budget=moneybag); use iconNames for structural/type affordances like CalendarBlank.

  • resource-view-types: Resource view types: list (1), board (2), table (3), dashboard (4), gantt (5), calendar (6), gallery (7), whiteboard (9). The numeric typeId is what /v1/views and view-config endpoints accept.

  • status-types: Status type enum — ACTIVE, DONE, CLOSED. Used when grouping tasks or filtering for visibility.

  • activity-types: Activity log event types — status_changed, task_created, comment_added, automation_executed, etc.

  • automation-action-types: Automation action types — SET_STATUS, SET_PRIORITY, SET_ASSIGNEES, ADD_COMMENT, etc. Use when building an automation rule.

  • automation-condition-types: Automation condition types (predicate categories) — STATUS, PRIORITY, DUE_DATE, CUSTOM_FIELD, etc.

  • automation-field-operators: Operators valid in automation condition predicates — equals, not_equals, greater_than, in, is_set, etc.

  • access-levels: Entity access levels — VIEW, COMMENT, EDIT, FULL — used in user/team access grants.

  • workspace-access-level-permissions: Workspace role → permission map (OWNER/ADMIN/MEMBER/GUEST). Tells you which capabilities each role grants.

Auth: the resources are @PermitAll for anonymous callers, but the ApiKeyScopeFilter still gates API-key requests. The metadata:read scope covers custom-field-types / custom-field-icon-options / resource-view-types / status-types / activity-types / access-levels / workspace-access-level-permissions. The three automation-* categories live under /v1/automation/* and require automations:read instead. If the API key lacks the required scope the call returns 403 — pick a category your key covers, or have the user mint a key with both metadata:read and automations:read.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
categoryYesWhich reference-data enum to list.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, and the description goes well beyond them by disclosing the auth model: @PermitAll resources still gated by ApiKeyScopeFilter, which categories need `metadata:read` versus `automations:read`, and that a missing scope yields 403 with a concrete remedy. That is exactly the kind of failure-mode 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The critical guidance (call before guessing, avoid 400s) is front-loaded, and the bulleted category structure is easy to scan. It is long, and some of the emoji-selection preference detail is more verbose than an agent strictly needs, but almost every line carries operational value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly explains what comes back ('the authoritative set of values the backend accepts') and how each category's rows are keyed. Permissions, scope requirements, and per-category purpose are all covered, leaving no obvious gap for a read-only list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so baseline would be 3, but the description adds real semantic content for the `category` enum — each of the ten values is explained with the shape of its output and, critically, how its values are consumed downstream. This turns a bare enum list into actionable parameter guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence gives a specific verb and resource ('List a Dutify reference-data enum') and immediately scopes it with concrete examples of the enums covered. It is clearly distinguished from siblings such as pm_list_task_types or pm_create_custom_field, which are named as consumers rather than alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states an explicit when: 'call this BEFORE guessing enum strings on a create/update payload to avoid 400s.' Each category block adds its own usage rule (e.g. use the `identifier` as the `fieldType` for pm_create_custom_field, use typeId for /v1/views), so the agent knows both when to call and what to do with the result.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_list_saved_filtersA
Read-onlyIdempotent
Inspect

List the current user's saved filters for a list. Filters are USER-scoped — they are not visible to other workspace members. API-key scope: filters:read.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
listIdentifierYesList identifier (tl_…)

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds two things annotations cannot convey: the user-scoping visibility rule and the required `filters:read` API-key scope, which is directly actionable for auth errors.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each carrying distinct information — what it returns, who can see it, and what scope it needs. The core operation is front-loaded with zero filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, single-required-param tool with full schema coverage and complete annotations, only a hint about the returned filter shape (ids, names, filter criteria) is missing, and there is no output schema to cover that. Everything an agent needs to invoke it correctly is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so account, workspace, and listIdentifier are already fully documented in the schema, and the description cannot exceed that. The phrase 'for a list' merely restates that listIdentifier is the target, adding no format or constraint detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List the current user's saved filters') plus the scoping unit ('for a list'), which is far more informative than the bare tool name. It does not explicitly name the related siblings (pm_save_filter, pm_delete_saved_filter), so an agent must infer the read-vs-write split from tool names alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clarifies the visibility model (USER-scoped, not visible to other workspace members) but never says when to call this versus pm_list_views, pm_save_filter, or pm_delete_saved_filter. Usage is implied by the verb 'List' rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_list_sprint_groupsA
Read-onlyIdempotent
Inspect

List all sprint groups in a space. Sprint groups are containers for sprints — each group has its own state machine (only one IN_PROGRESS sprint per group). Returns an array of SprintGroupDTO. API-key scope: sprints:read.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
spaceIdentifierYesSpace identifier (spc_…)

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower, and the description still adds real value: the required API-key scope `sprints:read`, the return shape (array of SprintGroupDTO), and the domain rule of one IN_PROGRESS sprint per group. It omits pagination/ordering behavior, 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each carrying distinct information (scope, domain model, return type, auth scope), with the core action front-loaded and no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with fully described parameters and annotations, the description covers action, return type, and auth requirement. With no output schema, a bit more on result fields or ordering would make it complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents account, workspace, and spaceIdentifier. The description only implies the space scoping ("in a space") and adds no format or constraint detail beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states a specific verb and resource with scope ("List all sprint groups in a space"), and the follow-up sentence defines what a sprint group is, which separates it from plain sprint tools like pm_get_sprint. It does not explicitly name siblings such as pm_create_sprint_group, keeping it just shy of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied — an agent can infer it should call this to discover sprint groups before creating sprints or starting one, but no when-to-use / when-not-to-use conditions or alternatives are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_list_task_commentsA
Read-onlyIdempotent
Inspect

List comments on a task by ref. Cursor-paginated. API-key scope: tasks:read.

NameRequiredDescriptionDefault
refYes
limitNo
cursorNo
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/closed-world, so the bar is lower, and the description still adds two non-annotation facts: results are cursor-paginated and the call requires the `tasks:read` API-key scope. It omits ordering, whether replies are included, and page-size behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short clauses, front-loaded with the action and resource, then pagination, then the auth scope. No filler and nothing that could be trimmed without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with rich annotations, this is close to sufficient, but with no output schema and 40% schema coverage the agent still cannot tell what a 'ref' looks like or how `limit` behaves. Those are the remaining gaps an agent would need to call it confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 40% (account and workspace are documented, ref/limit/cursor are bare), so the description must compensate. It partly does — 'by ref' anchors the required parameter and 'Cursor-paginated' explains the cursor — but `limit` is explained nowhere and the expected ref format (ID vs. slug) remains unstated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List comments on a task') plus the required keying ('by ref'), which suffices to separate it from pm_list_comment_reactions, pm_create_task_comment, and pm_update_task_comment. It stops short of naming a sibling explicitly, 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the resource name — you call it when you need the comment thread of a known task. There is no statement of when not to use it, no mention of alternatives (e.g. pm_get_subtasks or pm_read_activity_log), and no prerequisite guidance beyond the scope note.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_list_task_relationshipsA
Read-onlyIdempotent
Inspect

List all relationships where the task is owner OR child. Cursor-paginated. API-key scope: tasks:read.

NameRequiredDescriptionDefault
refYes
limitNo
cursorNo
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/closed-world, so the safety profile is covered. The description adds two things beyond that: the required API-key scope `tasks:read` (an auth prerequisite) and cursor pagination behavior. It does not disclose the relationship object shape or error behavior for an invalid ref.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with the scope qualifier front-loaded, then pagination, then auth scope. No filler and nothing redundant with the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with no output schema, the definition covers scope, pagination, and auth but says nothing about what a returned relationship contains (type/direction/target task) or what happens if `ref` is unknown. Enough to call it, not enough to interpret results confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 40%, and the required `ref` parameter has no schema description at all; the description only hints at its meaning via 'the task'. `limit` and `cursor` get one word ('Cursor-paginated'), while `account` and `workspace` are fully documented in the schema itself. Partial compensation, not full.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('List all relationships') and adds a scoping qualifier ('where the task is owner OR child') that tells the agent exactly which relationships are returned. It implicitly contrasts with pm_create_task_relationship / pm_delete_task_relationship by being the read path, but never names them, so it falls short of explicit sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: an agent infers it should call this to enumerate relationships for a given task, and 'Cursor-paginated' hints at iteration. There is no explicit when-to-use, no precondition on `ref`, and no statement of when a different tool (e.g. pm_get_task) would be preferable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_list_task_typesA
Read-onlyIdempotent
Inspect

Return the workspace task-type catalogue (identifier, name, singularName, pluralName, iconKind, iconValue, color, sortOrder, origin SYSTEM/CUSTOM). Use this to discover what types are available before creating/updating tasks, or to translate names to stable identifiers for the cascade-default endpoints. API-key scope: workspaces:read.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety (readOnly, idempotent, non-destructive, closed-world), so the description correctly spends its words elsewhere: it discloses the required API-key scope `workspaces:read`, which an agent cannot infer from the schema. It stops short of mentioning result size or whether the catalogue is workspace-scoped vs global beyond the word 'workspace'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, both front-loaded: what it returns first, then why/when to call it, with the auth scope appended as a trailing constraint. No filler or restatement of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema present, the description compensates by listing the returned field set, and it adds the required scope — the two things an agent would otherwise be guessing at. For a zero-required-parameter read-only catalogue, nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Both parameters are fully documented in the schema (100% coverage), including multi-account auth behavior and ACCOUNT_REQUIRED failure mode, so the description adds nothing parameter-specific. Baseline 3 is appropriate when the schema does all the work and the description stays silent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource ('Return the workspace task-type catalogue') and enumerates the exact payload fields (identifier, singularName, pluralName, iconKind, origin SYSTEM/CUSTOM), so the agent knows precisely what comes back. It also implicitly distinguishes itself from the mutating task tools by positioning itself as the discovery step before create/update.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives two concrete use cases: discovering available types before creating/updating tasks, and translating names into stable identifiers for cascade-default endpoints. There are no explicit exclusions or named alternatives, but for a read-only catalogue tool there is no realistic competing sibling to route away from.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_list_teamsA
Read-onlyIdempotent
Inspect

List teams in the current workspace, paginated. Each team carries identifier, name, alias, description, icon, color, and member list. Use pagination if there are many teams. API-key scope: teams:read.

NameRequiredDescriptionDefault
pageNoPage index, 0-based. Default 0.
sizeNoPage size, 1–100. Default 20.
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
sortColumnNoOptional sort column (name, createdAt, …)
sortDirectionNoSort direction

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the description's main added value is the required API-key scope `teams:read` and the pagination behavior plus the shape of each returned team. That is genuine context beyond structured fields; it does not, however, describe defaults or total-count/paging envelope behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action, then the payload, then the pagination note and auth scope. The 'use pagination if there are many teams' line is slightly redundant but overall tight.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully enumerates the returned fields, and it supplies the auth scope. Given six optional params fully documented in the schema and clear read-only annotations, an agent has enough to call it correctly; only sorting details and paging envelope remain unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema itself documents page, size, account, workspace, sortColumn and sortDirection. The description only gestures at pagination and returned fields, adding little syntax or interaction detail (e.g., allowed sort columns) beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List teams in the current workspace') with scope and pagination, and it is immediately distinguishable from pm_get_team, pm_create_team, pm_delete_team, pm_update_team. The second sentence enumerates the returned fields, leaving no ambiguity about what is retrieved.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Only guidance is the weak conditional 'Use pagination if there are many teams', which is implied by the page/size params anyway. There is no explicit routing versus pm_get_team (single team) or pm_list_workspace_members, though the read-only listing intent is reasonably evident from the name and description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_list_time_entriesA
Read-onlyIdempotent
Inspect

List time entries logged against a task. taskIdentifier must be a stable identifier (tsk_…), not a task key. Supports page/size/sortColumn/sortDirection (page-style). API-key scope: time:read.

NameRequiredDescriptionDefault
pageNo
sizeNo1–100
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
sortColumnNo
sortDirectionNo
taskIdentifierYesTask identifier (tsk_…)

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds genuinely new context: the required API-key scope `time:read`, the page-style pagination mode, and the identifier format constraint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with the purpose front-loaded and no filler. The pagination clause is a compact enumeration rather than a padded list.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter list tool with no output schema, it covers auth scope, identifier format, and pagination style. It leaves the sort parameters unspecified (valid columns/directions) and gives no hint about the shape or ordering of returned entries.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 57%, so the description must compensate. It does clarify that taskIdentifier must be a stable tsk_ id and not a task key, which goes beyond the schema string, but it says nothing about valid sortColumn fields or sortDirection values, leaving those unconstrained in both places.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource+scope: 'List time entries logged against a task'. An agent can distinguish it from pm_log_time and pm_delete_time_entry by the resource/verb combination, 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'logged against a task' — a task identifier is required and the tool is scoped to that task's entries. There is no explicit when-to-use/when-not or named alternative (e.g. use pm_log_time to add an entry).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_list_viewsA
Read-onlyIdempotent
Inspect

List views at a given scope. scope is one of workspace/space/folder/list; scopeIdentifier is the UUID of the parent entity (omit for workspace scope — the MCP's configured workspace is used). Cursor-paginated. API-key scope: views:read.

NameRequiredDescriptionDefault
limitNo
scopeYes
cursorNo
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
scopeIdentifierNoUUID of space/folder/list (omitted for workspace scope)

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, non-destructive and closed-world, so the description correctly spends its words elsewhere: it discloses cursor pagination and the required `views:read` API-key scope. The only gap is that it doesn't say what a view object contains or how large pages can be, 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action, then scope mechanics, then pagination and auth scope. Every sentence carries distinct information an agent needs and nothing is repeated from the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with full safety annotations and no output schema, this covers the hard parts: scope resolution, pagination existence, and the API-key permission. The missing piece is page-size behavior for `limit`, a minor omission rather than an agent-blocking one.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%, and the description compensates for `scope` (enumerating the four levels) and `scopeIdentifier` (omit-for-workspace, configured workspace fallback), plus implies `cursor` via "Cursor-paginated". `limit` is documented in neither the schema nor the description — no default, max, or units — so the compensation is incomplete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ("List views") and constrains it by scope, which immediately tells an agent this is the collection-listing counterpart to pm_get_view. It does not explicitly name the sibling it differs from, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains how to configure `scope`/`scopeIdentifier` (including the omit-for-workspace rule), which is real guidance on invoking the tool. However, it never says when to pick this over pm_get_view, pm_create_view, or pm_search_tasks — the alternative-selection dimension is only implied by the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_list_webhook_deliveriesA
Read-onlyIdempotent
Inspect

List recent delivery attempts for a webhook (most recent first). Each entry includes the event type, response status, attempt count, and timestamps. Useful for diagnosing why a subscriber is missing events. Pagination uses cursor (or page) and size (max 100, default backend-defined). API-key scope: webhooks:read.

NameRequiredDescriptionDefault
sizeNoPage size (max 100)
limitNoAlias for size (max 100)
cursorNoOpaque cursor / page token from a previous response
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
webhookIdentifierYesWebhook identifier

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), but the description adds genuinely new context: result ordering, the fields returned per entry, the required API-key scope `webhooks:read`, and the page-size ceiling. It does not discuss failure modes for an unknown webhookIdentifier, but the added auth-scope disclosure is real value beyond structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with the purpose and result shape before pagination and auth details. Minor noise: the `page` reference that has no matching schema property and the unexplained omission of the `limit` alias, which cost a point of precision.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only paged list with a fully documented schema and no output schema, the description covers ordering, entry contents, pagination and auth scope, which is what an agent needs. The unresolved `page` versus `cursor`/`limit` naming is the only real ambiguity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline would be 3; the description earns a bump by clarifying pagination semantics (cursor or page, size max 100, default backend-defined). The mention of `page` is slightly at odds with the schema, which only exposes `cursor`, `size` and the `limit` alias.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List recent delivery attempts for a webhook') plus ordering ('most recent first'), and enumerates what each entry contains. An agent can immediately separate it from pm_get_webhook (config), pm_list_webhooks (enumeration) and pm_replay_webhook_delivery (retry).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit use case — 'diagnosing why a subscriber is missing events' — which tells the agent when this is the right tool. It stops short of naming alternatives such as pm_replay_webhook_delivery for retrying or pm_get_webhook for configuration, so the when-not side is left implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_list_webhooksA
Read-onlyIdempotent
Inspect

List all webhook subscriptions registered in the current workspace. The HMAC secret is NOT included — only present in the original create response. API-key scope: webhooks:read.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety with readOnlyHint=true, idempotentHint=true, and destructiveHint=false, but the description adds useful behavioral context: the HMAC secret is intentionally omitted, and the call requires webhooks:read API-key scope. It does not describe pagination or response shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loads the main action, and every sentence adds useful information: one establishes the list scope, the other discloses the secret omission and auth requirement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only listing tool with rich schema coverage and annotations, the description is nearly complete: it explains scope, secret handling, and API-key scope. It could still mention pagination or return-list characteristics, but nothing critical to invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the account and workspace parameters are fully documented in the schema. The description adds no parameter-specific detail beyond general workspace scoping, which is the baseline expectation when the schema already carries parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: list webhook subscriptions. It also scopes the result to the current workspace, which helps distinguish this from single-webhook reads and webhook delivery listings, but it does not explicitly name or route against sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not say when to use this tool versus alternatives such as pm_get_webhook, pm_list_webhook_deliveries, or pm_get_webhook_usage. Usage is only implied by the phrase 'List all webhook subscriptions' and there are no exclusions or selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_list_workspace_membersA
Read-onlyIdempotent
Inspect

List members of the current workspace. Workspace is taken from the MCP config — no need to pass it. RESPONSE IS A PAGINATED ENVELOPE, NOT AN ARRAY: {users: WorkspaceUserDTO[], totalCount, page, size, totalPages} — read members from users (treating the response itself as a list fails). FOOTGUN: size DEFAULTS TO 20 when omitted, so a single call silently returns only the first 20 members and no error — don't assume it's the full roster. To enumerate everyone, page (page is 0-based) until you have collected totalCount. size is capped at 100 and a value >100 is a 400, not clamped. Use search (case-insensitive substring on first/last name or email, applied before paging) to find a specific member instead of paging blindly. Side effect: updates the caller's last-active timestamp. API-key scope: workspaces:read.

NameRequiredDescriptionDefault
pageNo0-based page number
sizeNoPage size, 1–100. DEFAULTS TO 20 if omitted (silent truncation); >100 returns 400.
searchNoCase-insensitive substring on first name / last name / email; applied before paging, so totalCount reflects matches.
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
sortColumnNo
sortDirectionNo'asc' or 'desc'

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well past the annotations: it names the paginated envelope shape and the failure mode of treating it as an array, warns that `size` silently defaults to 20, states that >100 is a 400 rather than a clamp, discloses the last-active timestamp side effect, and names the required `workspaces:read` scope. These are exactly the non-obvious traits an agent cannot get from readOnlyHint/idempotentHint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then the highest-risk facts (response shape, truncation footgun) before the finer points. Dense but nearly every sentence carries distinct value; only the restatement of schema-level details like the 20 default and 0-based paging is mildly redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description supplies the response envelope shape, and with 7 optional params it covers the operational pitfalls (truncation, 400 cap, pre-paging search) and auth scope. An agent has everything needed to call it correctly and interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 86%, so the baseline is 3; the description still adds meaning by explaining that `search` is applied before paging (so totalCount reflects matches) and that `workspace` need not be passed. Much of the `size`/`page` prose repeats what the schema already documents, keeping this short of a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List members of the current workspace') and immediately clarifies scope resolution ('Workspace is taken from the MCP config'), which separates it from team-, invitation-, and account-listing siblings. No ambiguity about what is returned or which workspace is targeted.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear in-tool routing advice: use `search` to find a specific member rather than paging blindly, and page until `totalCount` is collected. It does not, however, contrast itself with adjacent siblings such as pm_get_workspace_context, pm_list_invitations, or hub_list_members, so the cross-tool 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.

pm_log_timeAInspect

Log a time entry against a task. timeSpent is in minutes (0 to 10080 — 7 days max). startedAt is an ISO-8601 instant marking when the tracked work started. notes is optional (max 10000 chars). The user is set server-side from the JWT — do NOT pass userUuid. API-key scope: time:write.

NameRequiredDescriptionDefault
notesNoOptional notes (max 10000 chars)
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
startedAtNoISO-8601 instant (e.g. 2026-04-14T09:00:00Z)
timeSpentYesMinutes spent (0–10080, max 7 days)
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
taskIdentifierYesTask identifier (tsk_…)

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations, the description discloses that the user is set server-side from the JWT, warns not to pass userUuid, and names the required API-key scope time:write. It also gives validation bounds for timeSpent and notes. It does not describe response behavior or duplicate-entry handling, but annotations already cover the non-read-only and non-idempotent nature.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded, beginning with the core action. Each sentence adds either a constraint, parameter clarification, or auth requirement without filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with rich schema coverage and annotations, the description supplies key auth and identity details plus parameter limits. It is slightly incomplete because it does not describe the return value or duplicate-entry behavior, and no output schema is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameter documentation is already strong. The description restates the meaning of timeSpent, startedAt, and notes, which adds little beyond the schema, and it does not clarify taskIdentifier, account, or workspace semantics beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Log a time entry against a task.' This clearly distinguishes creation from sibling tools such as pm_list_time_entries and pm_delete_time_entry. An agent can identify the operation without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage through 'Log a time entry,' but does not explicitly say when to use this tool versus alternatives like pm_list_time_entries or pm_delete_time_entry. No prerequisites or exclusion conditions are stated beyond API-key scope.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_mark_all_notifications_readA
Destructive
Inspect

Mark every unread notification in the active workspace as read for the current user. API-key scope: notifications:write.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false and readOnlyHint=false, so the safety profile is covered; the description adds value by naming the required `notifications:write` permission scope and confirming the bulk, per-workspace, per-user blast radius. It does not say whether the change is reversible or how to undo it, which would matter for a bulk mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero waste; the action and scope are front-loaded and the permission requirement is a compact trailing clause.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, no-output-schema bulk mutation, the description covers scope, subject and required permission. Only the absence of any statement about reversibility or the result of the operation keeps it short of fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both `account` and `workspace` are thoroughly documented in the schema, so the description need not repeat them. It adds the concept of an 'active workspace' default, but no syntax or format guidance beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource with explicit scope: 'Mark every unread notification in the active workspace as read for the current user.' The words 'every' and 'unread' implicitly differentiate it from the singular pm_mark_notification_read, but that sibling is never named, 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the scoping language ('unread', 'active workspace', 'current user'), and the API-key scope line hints at a prerequisite. There is no explicit when-to-use versus pm_mark_notification_read, nor any warning about when not to run a bulk update.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_mark_notification_readA
Destructive
Inspect

Mark a single notification as read. Only the notification owner may do this — calling with another user's notification identifier returns an error. API-key scope: notifications:write.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
identifierYesNotification identifier

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations declare destructiveHint=true and idempotentHint=false, and the description adds real value with the ownership error behavior and the required API-key scope (notifications:write). However, it is silent on the destructive/non-idempotent claims — an agent gets no hint that the state change is characterized as destructive or that repeating the call is not guaranteed safe. Not contradictory, but only partially compensating.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler. The ownership constraint and auth scope are front-loaded after the core action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter mutation with a full input schema, the description covers the action, the authorization requirement, the failure mode, and the required scope. The one remaining gap is any statement about reversibility or the meaning of the destructive annotation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so account, workspace, and identifier are already fully documented in the input schema. The description only reinforces that identifier refers to a notification the caller owns; baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Mark a single notification as read'), and 'a single notification' implicitly distinguishes it from the sibling pm_mark_all_notifications_read. It does not name the sibling explicitly, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives one hard precondition (owner-only, error otherwise), which is useful, but never says when to choose this over pm_mark_all_notifications_read or how it relates to pm_list_notifications. Usage is implied rather than routed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_read_activity_logA
Read-onlyIdempotent
Inspect

Read the activity log for a scope. scope selects the entity type and identifier is that entity's identifier (use the workspace identifier when scope=workspace). mode is either 'full' (this entity AND everything beneath it) or 'own' (this entity only). Cursor-paginated.

WARNING: every entry has a data field that is a JSON-encoded STRING — to inspect the payload you must double-parse it (parse the response, then JSON.parse(entry.data)). API-key scope: activity_log:read.

NameRequiredDescriptionDefault
modeNoDefault 'full'
sizeNo1–100
scopeYes
cursorNoOpaque cursor from a previous response
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
identifierYesEntity identifier — workspace identifier when scope=workspace, otherwise the space/list/task identifier.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint/idempotentHint annotations, it discloses three things the agent could not otherwise know: entries' `data` field is a JSON-encoded string requiring double-parse, the result set is cursor-paginated, and the call needs the `activity_log:read` API-key scope. These are exactly the failure modes that would otherwise derail an agent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose, then parameter semantics, then the practical warning and auth note. Every sentence carries information; the uppercase WARNING is slightly louder than needed but flags a genuine gotcha rather than padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a paginated read with no output schema, it covers enough: pagination mechanism, the shape of the `data` field, and auth scope. It stops short of stating entry ordering (e.g., newest-first) or which top-level fields an entry carries, which would make the response fully predictable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 86%, but the description adds real meaning for the two enums: it defines 'full' as this entity plus everything beneath it and 'own' as this entity only, whereas the schema only says "Default 'full'". The account/workspace/cursor/size parameters are left to the schema, which is adequate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific verb and resource (read the activity log) and immediately defines the scope/identifier/mode triple that determines what is returned. An agent can tell exactly what subset of data this returns, and there is no competing activity-log sibling to route against.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clarifies the selection semantics that matter for invoking it: use the workspace identifier when scope=workspace, and 'full' vs 'own' to include or exclude descendant entities. It does not discuss when to reach for this versus other read tools (e.g., pm_list_notifications), but with no true alternative in the sibling set that omission is minor.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_remove_comment_reactionA
Destructive
Inspect

Remove a reaction by identifier. Only the user who added the reaction may remove it. 204. API-key scope: tasks:write.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
taskIdentifierYesTask identifier (tsk_…)
commentIdentifierYesComment identifier (cmt_…)
reactionIdentifierYesReaction identifier (react_…)

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes beyond the annotations by disclosing the ownership authorization requirement, the 204 no-content response, and the required `tasks:write` API-key scope. The annotations already carry destructiveHint=true and idempotentHint=false, so the description's job is to add operational detail — which it does. It does not say what happens when the reaction is missing or owned by someone else.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action, then the authorization constraint, then the response code and scope. Every sentence carries distinct information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 definition covers the mutation, the auth requirement, the scope string, and the empty 204 return. It omits error behavior (403 when not the owner, 404 when the reaction is absent), which is the main remaining gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all five parameters including account/workspace scoping are already fully documented in the schema. The description only restates that removal is 'by identifier' and adds no format or interaction detail beyond that, which is the baseline when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Remove a reaction') plus how it is addressed ('by identifier'), which distinguishes it in practice from pm_add_comment_reaction and pm_list_comment_reactions. It never names a sibling explicitly, so it stops short of the top mark.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an ownership precondition ('Only the user who added the reaction may remove it'), which is a real gating rule rather than pure usage guidance. It offers no explicit when-to-use/when-not-to-use framing or named alternatives, leaving the agent to infer that add/list reactions are separate tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_remove_tasks_from_sprintA
Destructive
Inspect

Remove task-sprint associations. Tasks remain in their lists. Pass identifiers (tsk_…), not task keys. Returns updated SprintDTO. API-key scope: sprints:write.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
taskIdentifiersYesTask identifiers (tsk_…); 1+ required
sprintIdentifierYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=false, and the description adds genuinely useful context beyond them: the blast radius is limited to the association (tasks stay in their lists), the return is the updated SprintDTO, and the required API-key scope is `sprints:write`. It does not cover edge behavior such as what happens when a task is not in the sprint, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, each carrying distinct information, with the core action front-loaded. Nothing is redundant or padded relative to the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the description compensates by naming the return value (updated SprintDTO) and the required scope. Remaining gaps around sprintIdentifier format and error cases keep it below complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75%, so the schema already documents account, workspace, and the tsk_… format for taskIdentifiers; the description's id-format note largely restates that. sprintIdentifier has no description in the schema and the description does not clarify whether it accepts a spr_… id or a name, leaving the main gap unfilled.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

A specific verb-plus-resource statement ("Remove task-sprint associations") that immediately disambiguates from deletion by noting "Tasks remain in their lists." An agent can distinguish it from pm_delete_task and pair it with pm_add_tasks_to_sprint without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states the non-destructive framing and the id-format requirement ("Pass identifiers (tsk_…), not task keys"), which implicitly steers the agent away from delete_task for unlinking work. It stops short of naming pm_add_tasks_to_sprint as the inverse or stating when-not to use this tool, so no explicit alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_remove_team_memberA
Destructive
Inspect

Remove a single user from a team. Returns 204. Requires MANAGE_TEAMS. API-key scope: teams:write.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
userUuidYesUser UUID to remove
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
identifierYesTeam identifier (team_…)

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and non-idempotent, so the mutation profile is covered. The description adds genuinely useful facts the annotations don't: the required permission (MANAGE_TEAMS), the API-key scope (teams:write), and the 204 response. It doesn't say what happens to the removed user's task assignments, which keeps it below 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, zero waste, with the action and scope front-loaded before the auth preconditions. Nothing repeats the tool name or schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple destructive removal with no output schema, the description covers the action, the 204 response, and the authorization requirement. A note on side effects (for example, whether the user's task assignments are unassigned) would make it fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so account, workspace, userUuid and identifier are all documented in the schema. The description adds no per-parameter meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Remove a single user from a team") with a clear cardinality ("a single user"), which distinguishes it implicitly from pm_remove_workspace_member and pm_add_team_member via the team-vs-workspace resource. It stops short of naming the sibling to use instead, so it isn't a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Requires MANAGE_TEAMS" gives a precondition but not a when-to-use rule; there is no guidance on when to pick this versus pm_change_member_role or pm_remove_workspace_member. The usage context is implied by the resource, not stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_remove_workspace_memberA
Destructive
Inspect

Remove a member from the workspace. NOTE: the target user UUID is passed as the deletionUserUuid QUERY parameter, not in the path or body. Caller needs MANAGE_USERS permission. Cannot remove the workspace owner — transfer ownership first via pm_transfer_workspace_ownership. Returns 204. API-key scope: workspaces:write.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
deletionUserUuidYesUUID of the user to remove

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructive=true and non-idempotent, but the description adds the permission requirement, the 204 response, the API-key scope (workspaces:write), and the owner-transfer precondition. These are operational facts an agent needs before calling a destructive mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Six compact clauses, each carrying a distinct fact, with the action stated first and the surprising query-parameter constraint flagged early. No filler or restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter destructive mutation with no output schema, the description covers auth, permissions, the one hard failure mode and its remedy, the success code, and parameter placement. Nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so field meanings are already documented. The description still adds transport-level value the schema cannot convey: deletionUserUuid must go in the QUERY string, not the path or body — exactly the detail that causes failed invocations.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Remove a member from the workspace'), which is unambiguous on its own. It does not, however, distinguish itself from the self-removal sibling pm_leave_workspace or from pm_remove_team_member, so an agent must infer which removal tool applies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives real preconditions (MANAGE_USERS permission) and an explicit exclusion with a named alternative: cannot remove the owner, use pm_transfer_workspace_ownership first. It stops short of routing between this and pm_leave_workspace/pm_remove_team_member, but the when-not guidance is concrete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_replay_webhook_deliveryA
Destructive
Inspect

Re-send a specific past delivery to the webhook URL. Useful when the subscriber was down during the original attempt window or you need to re-trigger downstream processing. Replays use the same payload, signature, and X-Webhook-Delivery id as the original — subscribers MUST treat receipt of a duplicate delivery id as idempotent. API-key scope: webhooks:write.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
webhookIdentifierYesWebhook identifier
deliveryIdentifierYesDelivery (attempt) identifier to replay

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds real context beyond the annotations: the replayed payload, signature, and X-Webhook-Delivery id are preserved, and the required `webhooks:write` API-key scope is named. It also warns that subscribers must be idempotent on duplicate delivery ids, which complements rather than contradicts the idempotentHint=false / destructiveHint=true annotations. It does not say whether the webhook must be enabled or what effect the replay has on delivery state.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, followed by when-to-use, payload/signature semantics, and auth scope. Four sentences, all contributing; only minor redundancy between the 're-trigger downstream processing' and idempotency sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers action, motivation, payload identity, and permission scope for a mutation tool with no output schema. The main residual gap is the response shape — whether it returns a new delivery record or a status — but 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the required webhookIdentifier and deliveryIdentifier are already documented; the description only implies they select the 'specific past delivery'. No additional format or discovery guidance (e.g. obtain delivery ids from pm_list_webhook_deliveries) is offered, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Re-send a specific past delivery to the webhook URL', which is clearly distinct from pm_test_webhook (synthetic test) and pm_list_webhook_deliveries (read). An agent can identify the operation without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete triggering conditions — subscriber was down during the original attempt window, or downstream processing must be re-triggered. It lacks explicit exclusions, e.g. that pm_test_webhook should be used for a synthetic payload or that deliveries must be located first via pm_list_webhook_deliveries.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_save_filterA
Destructive
Inspect

Create a new saved filter on a list. Body is a FilterAggregateDTO with structured filterGroups — each group has a precedingLogic (AND/OR) and a list of filters. Each filter has field, operator (one of: is, equals, not, not_equals, like, greater_than, less_than, greater_or_equal, less_or_equal, is_set, is_not_set, in, not_in), value, optional precedingLogic, and isCustomField flag. Max 10 groups, max 20 filters per group.

No PATCH/PUT exists — to edit, delete + re-create. API-key scope: filters:write.

NameRequiredDescriptionDefault
nameNoDisplay name for the saved filter
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
filterGroupsYesFilter groups (max 10)
listIdentifierYesList identifier (tl_…)

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already disclose that this is a write, non-idempotent, open-world, destructive tool, so the description does not need to restate those safety hints. It adds useful behavioral context beyond annotations: maximum 10 groups and 20 filters per group, no update endpoint, and the filters:write scope requirement. It does not cover duplicate-name behavior or the returned saved-filter identifier.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the main action and structure, then gives limits and update/auth constraints in a compact second paragraph. Some of the operator enumeration repeats the schema, but the overall size is reasonable for a nested filter-creation payload.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a create tool with no output schema, the description covers invocation essentials: required body shape, nesting limits, edit restriction, and auth scope. It is slightly incomplete in not describing the response or how to verify the created filter via pm_list_saved_filters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already documents the nested filterGroups structure, operators, value types, and limits. The description largely repeats that same DTO shape and operator enum, so it adds little semantic meaning beyond the high-coverage schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: create a new saved filter on a list. It also distinguishes the create-only behavior from the nonexistent update path, so an agent can tell this is not an edit or list operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly indicates when to use this tool: creating a new saved filter, and it explicitly notes that editing requires delete + re-create because no PATCH/PUT exists. It also gives the required API-key scope, though it does not explicitly route the user to sibling tools such as pm_list_saved_filters or pm_delete_saved_filter.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_search_tasksA
Read-onlyIdempotent
Inspect

Search tasks across the workspace with name-based filters. status / priority / tag / taskType are repeatable (pass an array). assignee is an email or UUID. q is a free-text search over title + description. Returns a cursor-paginated page of LiteTaskResponse — pass nextCursor back as cursor to paginate. Present title linked to webUrl; show displayKey only when non-empty. key and identifier are API references, not display labels. API-key scope: tasks:read.

NameRequiredDescriptionDefault
qNoFree-text search over title + description
tagNoTag names (OR)
limitNoDefault 50, max 200
spaceNoNarrow to one space by name
cursorNoOpaque cursor from a previous response
parentNoDirect children of this task (key or identifier)
statusNoStatus names (OR)
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
assigneeNoAssignee emails or UUIDs (OR)
priorityNoPriority names (OR)
taskTypeNoTask type names (OR)
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
includeClosedNoDefault false
listIdentifierNoNarrow to one list by its identifier (lst_…)
includeSubtasksNoDefault true

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/idempotent annotations, the description discloses the required API-key scope (tasks:read), the return type (LiteTaskResponse), the cursor pagination contract (pass nextCursor back as cursor), and output presentation rules (title linked to webUrl, displayKey only when non-empty, key/identifier are not display labels). That is materially more than the annotations already convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Six tight sentences, front-loaded with the verb and resource, then filters, then pagination, then presentation. Every sentence carries operational information an agent would otherwise have to infer; nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description must carry the return-value burden, and it does so briefly through the LiteTaskResponse name and the nextCursor pagination contract. The 15 parameters are all schema-documented, though the description does not touch space/parent/account, leaving multi-account selection entirely to the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, and the description adds real meaning: the four enum-style filters are repeatable arrays, assignee accepts email or UUID, q covers title plus description, and cursor is sourced from the previous response's nextCursor. It leaves space/parent/workspace/account to the schema, which already documents them well.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource with scope: "Search tasks across the workspace with name-based filters." That is enough to separate it from get-style siblings like pm_get_task and pm_get_sprint_tasks, but it never names an alternative sibling or says what it is not, which keeps it at a 4 rather than a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the search framing and by operating notes (repeatable array fields, cursor round-trip, tasks:read scope), but the description never says when to choose this over siblings such as pm_get_sprint_tasks, pm_list_saved_filters, or pm_get_subtasks. No exclusions or when-not conditions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_send_invitationA
Destructive
Inspect

Send an email invitation to join the current workspace. workspaceAccessLevelId is a numeric Long id (NOT a name like "admin"/"member") — fetch the catalogue from /v1/workspaces/{ws}/access-levels to translate role names to ids before calling. Caller needs MANAGE_USERS permission. Returns 201 on success. API-key scope: users:write.

NameRequiredDescriptionDefault
emailYesInvitee email address
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
workspaceAccessLevelIdYesNumeric access-level id (Long); list /v1/workspaces/{ws}/access-levels to discover

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds meaningful context beyond annotations: an actual email is dispatched, MANAGE_USERS is required, 201 is returned on success, and the API-key scope is `users:write`. Annotations already flag destructive/openWorld/non-idempotent, so the description complements rather than repeats them; it could still warn that repeat calls re-send mail to the invitee.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences, front-loaded with the action, then the parameter gotcha, then permissions/return/scope. No filler and no repetition of schema text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation that triggers outbound email with no output schema, the description covers auth, id resolution, success code, and scope. Minor gap: it says 'current workspace' though a `workspace` parameter overrides it, and duplicate-invite behavior is unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline would be 3, but the description adds genuine disambiguation: `workspaceAccessLevelId` is a numeric Long id and NOT a role name like "admin"/"member", plus the endpoint to translate names to ids. That is the single most likely invocation error and it is called out explicitly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource: 'Send an email invitation to join the current workspace.' An agent can distinguish this from pm_list_invitations and pm_cancel_invitation. It does not, however, contrast it with pm_add_workspace_member / pm_add_team_member, which are the plausible alternatives for getting a user into a workspace.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives real pre-call conditions: caller needs MANAGE_USERS permission, and the access level must be resolved via /v1/workspaces/{ws}/access-levels before calling. It stops short of stating when to prefer an invite over a direct add-member call, so it is clear context without explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_start_sprintA
Destructive
Inspect

Transition a sprint from NOT_STARTED to IN_PROGRESS. Only ONE sprint per group can be IN_PROGRESS at a time — starting a sprint while another is in progress will fail. No body. API-key scope: sprints:write.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
sprintIdentifierYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=false; the description adds meaningful context beyond them: the required starting state, the one-in-progress-per-group rule and its failure mode, 'No body', and the `sprints:write` API-key scope. It does not say whether the transition is reversible or what happens to sprint tasks/dates, 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the state transition, then the constraint, then the terse 'No body' and auth scope. Nothing is wasted or buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool whose safety profile is already in annotations, the description covers precondition, failure mode, request shape, and auth scope. Only the format of the required sprintIdentifier and post-transition effects are left unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%: account and workspace are fully documented in the schema, but the sole required parameter, sprintIdentifier, has no description in either place — the description offers no hint whether it is an ID, key, or name. Baseline 3 applies since the schema carries most parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Transition a sprint') plus the exact state change (NOT_STARTED → IN_PROGRESS), which cleanly separates it from siblings like pm_update_sprint and pm_complete_sprint. An agent knows exactly what this 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear precondition (sprint must be NOT_STARTED) and an explicit failure condition (another sprint in the same group already IN_PROGRESS). It stops short of naming a sibling alternative, e.g. 'use pm_complete_sprint to close an active sprint', so it is clear context rather than full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_test_webhookA
Destructive
Inspect

Fire a synthetic test delivery to a webhook on demand, without waiting for a real workspace event. PM POSTs a webhook-test event with body {"test": true, "message": "This is a test webhook delivery"} to the registered URL, signed with the same X-Webhook-Signature-256 HMAC as live deliveries. Use this to verify a receiver is reachable and that your HMAC signature-verification is correct when setting up two-way communication. Returns the resulting delivery record (status, attempt, timestamps) — inspect it (or pm_list_webhook_deliveries) to confirm the endpoint accepted it. API-key scope: webhooks:write.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
webhookIdentifierYesWebhook identifier

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say destructive/openWorld/non-idempotent; the description adds the concrete behavior behind that: an outbound POST of {"test": true, ...} to the registered URL, signed with the same X-Webhook-Signature-256 HMAC as live deliveries, plus the required `webhooks:write` scope. It also discloses what is returned (status, attempt, timestamps). That is real context an agent cannot get from 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with what happens on the wire, then the reason to call it, then the return value and scope. Each sentence contributes distinct information with no repetition of the title or schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-purpose action with no output schema, the description covers trigger, exact side effect, signature semantics, expected return shape, verification path via pm_list_webhook_deliveries, and the required API-key scope. Nothing an agent needs in order to invoke and interpret results is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so account/workspace/webhookIdentifier are already fully documented, and the baseline would be 3. The description still adds a bit of meaning by tying the call to a 'registered URL' belonging to the webhook being addressed, but it gives no hint about identifier format or how to obtain a webhook id (pm_list_webhooks).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: fires a synthetic 'webhook-test' delivery to a registered webhook on demand. It is clearly distinguishable from pm_get_webhook (read config), pm_replay_webhook_delivery (resend a real delivery) and pm_list_webhook_deliveries (inspect history), and it even spells out the exact event body, so the agent knows precisely what will be sent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit use case — verifying receiver reachability and that HMAC signature verification is correct during two-way setup — and points at pm_list_webhook_deliveries as the way to confirm the outcome. It lacks an explicit 'do not use this to retry a real failed delivery, use pm_replay_webhook_delivery instead' exclusion, which is the one remaining ambiguity against a close sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_transfer_workspace_ownershipA
Destructive
Inspect

Transfer workspace ownership to another existing member. Only the current owner can do this, and the target user must already be a member. resultingOwnerAccessLevelId is the numeric access-level id the CURRENT (departing) owner will keep — typically a regular admin/member level. Discover access-level ids via /v1/workspaces/{ws}/access-levels. API-key scope: workspaces:write.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
transferToUserUuidYesUUID of the new owner (existing member)
resultingOwnerAccessLevelIdYesNumeric access-level id (Long) the previous owner will be assigned

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructive=true and non-idempotent, and the description earns credit beyond that by documenting the authorization requirement (current owner only, `workspaces:write` scope) and the counterintuitive semantics that the departing owner keeps a retained access level. It does not state whether the transfer is reversible or what happens to the departing owner's other permissions, leaving a real gap for a destructive mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tightly packed sentences, front-loaded with the action and the two preconditions before the parameter caveat. There is minor redundancy between "the numeric access-level id the CURRENT (departing) owner will keep" and "typically a regular admin/member level," but no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, non-idempotent mutation with no output schema, the description covers preconditions, auth scope, and the ambiguous parameter — enough to call it correctly. It omits what the response contains and what happens to the departing owner's sessions/other grants, which would be useful for a destructive operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3; the description adds genuine disambiguation by stressing in caps that `resultingOwnerAccessLevelId` is the level the CURRENT/departing owner retains — an easy-to-invert semantic — and by naming a discovery endpoint for its values. It adds no help for the `account` and `workspace` parameters, but those are already fully documented in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Transfer workspace ownership") plus the exact constraint that the recipient must be an "existing member," which separates it from generic role-change tools like pm_change_member_role. It never names an alternative sibling by name or says what it is NOT, so it stops short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear preconditions: only the current owner may invoke it and the target must already be a member, which tells the agent when the call is valid and what failure modes to expect. It also routes the agent to /v1/workspaces/{ws}/access-levels to obtain a required id, but it does not contrast with alternatives such as pm_change_member_role or pm_remove_workspace_member.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_update_automationA
Destructive
Inspect

Update an existing automation. All fields except identifier are optional — only specified fields change. triggers, actions, and conditionNodes, when present, REPLACE the existing collection (not append). Use active: false to disable without deleting. API-key scope: automations:write.

NameRequiredDescriptionDefault
nameNo
activeNoEnable / disable the rule
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
actionsNoREPLACES existing actions
triggersNoREPLACES existing triggers
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
identifierYesAutomation identifier (auto_…)
descriptionNo
conditionNodesNoREPLACES existing condition tree (omit to leave it untouched)

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds behavior beyond the annotations: partial PATCH semantics, and the critical warning that triggers/actions/conditionNodes REPLACE rather than append — exactly the destructive consequence flagged by destructiveHint. It also discloses the required API-key scope (`automations:write`), 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, each carrying distinct information: purpose, optionality, the replace-not-append hazard, the disable idiom, and the auth scope. The most dangerous trait (REPLACE) is front-loaded near the top.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, non-idempotent mutation with 9 params and no output schema, the essential behaviors are covered: partial update, collection replacement, disable-vs-delete, and required scope. It does not mention failure modes (e.g. invalid action/trigger types, account selection errors) or what a successful update returns, which would round it out.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 78% and the schema already documents the replace semantics for the three collection params, so there is some duplication. The description still adds meaning the schema lacks, notably that only specified fields change and the `active: false` idiom for disabling.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ("Update an existing automation") and immediately scopes it against the create/delete siblings through the phrase "existing automation" plus the partial-update rule. An agent can distinguish it from pm_create_automation and pm_delete_automation without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete when-to guidance: it is for changing only specified fields, and `active: false` is the intended path for disabling instead of deleting. It does not explicitly name pm_create_automation / pm_delete_automation as the alternatives for those cases, so 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.

pm_update_current_userA
Destructive
Inspect

Update the current user's profile. Today the request body has a single field (fullName) — pass the new display name. Returns the updated TaskManagementUserDTO. API-key scope: users:write.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
fullNameYesNew display name shown across the app
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare mutation, destructiveness and world-openness, so the bar is lower; the description still adds real value by stating the auth scope (`users:write`), the mutability scope ('today the request body has a single field'), and the return type. It does not say whether the change is reversible or what happens to unmentioned profile fields, 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each carrying distinct information — action, current payload shape, return value and scope — with the action front-loaded and zero filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter mutation with full schema coverage and no output schema, the description covers the essentials and even names the returned DTO. Minor gaps (reversibility, whether partial profile data is affected) remain, but nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents `fullName`, `account` and `workspace` in detail. The description's 'pass the new display name' merely restates the schema's own phrasing and adds nothing about the multi-account or workspace override parameters, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Update the current user's profile') and immediately narrows the scope ('request body has a single field (`fullName`)'). It is trivially distinguishable from the read-only sibling pm_get_current_user, so an agent needs no further inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear operating instructions for the call: pass the new display name, note that only one field exists today, and the required API-key scope (`users:write`). It does not explicitly name an alternative or a when-not-to-use condition, 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.

pm_update_custom_fieldB
Destructive
Inspect

Update custom-field metadata (name / description / emoji / color / isPrivate). API-key scope: custom_fields:write.

NameRequiredDescriptionDefault
nameNo
colorNo
emojiNo
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
isPrivateNo
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
identifierYesCustom field identifier (cf_…)
descriptionNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=false, and the description usefully adds the required API-key scope. However, it never explains partial-update semantics (what happens to omitted fields), whether removing a field from the payload clears it, or any confirmation/reversibility behavior — gaps that matter for a mutation flagged destructive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the operation and the mutable fields, followed by the auth scope. No filler, though the parenthetical field list is slightly redundant with the schema property names.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-param mutation with destructiveHint and no output schema, the definition covers intent and auth scope but omits update semantics (partial vs. full replace), required-scope error behavior, and workspace/account selection implications. Annotations carry the safety profile, so this is adequate but clearly incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 38%, and the description lists five of the eight parameters (name, description, emoji, color, isPrivate), adding minor value by framing them as the field's metadata set. It says nothing about the `account`, `workspace`, or `identifier` parameters beyond what the schema already documents, so it neither compensates for the coverage gap nor is empty.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (update) and resource (custom-field metadata) and enumerates the mutable fields (name/description/emoji/color/isPrivate), which clearly separates it from pm_create_custom_field or pm_delete_custom_field. It stops short of naming a sibling tool explicitly, 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use/when-not guidance or mention of alternatives such as pm_delete_custom_field or pm_create_custom_field. The only actionable context is the `custom_fields:write` scope note, which implies a write path but leaves the choice among CRUD siblings to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_update_folderB
Destructive
Inspect

Update folder metadata by identifier (fld_…). All fields optional. API-key scope: folders:write.

NameRequiredDescriptionDefault
iconNo
nameNo
colorNo
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
isPrivateNo
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
identifierYesFolder identifier (fld_…)
descriptionNo

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag this as a non-read-only, destructive, non-idempotent, open-world mutation, so the description does not need to re-declare that. It adds the auth-scope requirement (`folders:write`), which is genuinely useful, but says nothing about what happens to unspecified fields, whether updates are reversible, or what is returned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact clauses, front-loaded with the action and identifier format, then optionality, then the auth requirement. No filler, though the scope clause could be merged more tightly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter destructive mutation with no output schema and low schema coverage, the description gives only the minimum: identifier format, optionality, and auth scope. It is enough to attempt the call but leaves the meaning of most parameters and the effect of the update unexplained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 38%: icon, name, color, isPrivate, and description carry no schema text at all. The description does not compensate, adding nothing beyond the identifier format the schema already states and a generic "all fields optional" that does not explain value formats for the undocumented fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Update folder metadata") and pins the target with the identifier prefix fld_…, which cleanly separates it from pm_create_folder and pm_delete_folder. It stops short of naming those siblings explicitly, so an agent infers 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"All fields optional" implies partial-update semantics, and the `folders:write` scope hints at the permission needed. There is no explicit when-to-use/when-not-to-use guidance and no pointer to related tools such as pm_update_list or pm_create_folder.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_update_listB
Destructive
Inspect

Update list metadata by identifier (tl_…). All fields optional. API-key scope: lists:write.

NameRequiredDescriptionDefault
iconNo
nameNo
colorNo
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
isPrivateNo
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
identifierYes
descriptionNo

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already disclose that the operation is not read-only, is destructive, and is non-idempotent; the description adds the required API-key scope ('lists:write'). It does not elaborate on what 'destructive' means for list metadata, whether existing values are overwritten, or what happens to unspecified fields, leaving a significant behavioral gap 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the operation and identifier format. Every sentence contributes useful information without repetition or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter destructive mutation with only 25% schema description coverage and no output schema, the description is too sparse. Annotations cover the safety profile, but the description does not adequately document parameter semantics or the effects of the update.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25%, so the description must carry more weight. It adds the identifier format and optionality, but does not clarify the meaning of the other parameters (name, color, icon, isPrivate, description), leaving most of the 8 parameters undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Update list metadata') plus the identifier format ('tl_…'), making the operation clear. It does not explicitly distinguish itself from sibling list operations such as pm_create_list, pm_delete_list, or pm_update_task, 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use for updating an existing list and notes that all fields are optional, which helps callers understand partial updates. However, it provides no explicit when-to-use guidance, prerequisites, or alternatives to related tools such as pm_create_list or pm_delete_list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_update_notification_channelA
Destructive
Inspect

Enable or disable a single notification module/channel combination — e.g. email-off for due-date reminders. The module names come from pm_get_notification_settings. Pass enabled: true|false. To bulk-toggle all channels for a module, repeat this tool for each channel; there is no bulk endpoint. API-key scope: users:write.

NameRequiredDescriptionDefault
moduleYesModule identifier from the aggregated settings — e.g. 'comments', 'mentions', 'assignments', 'due_date', 'automation', 'invitation'
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
channelYesDelivery channel
enabledYesTurn the channel on (true) or off (false)
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds real context beyond annotations by disclosing the required API-key scope (`users:write`) and the ambiguity of bulk behavior. It does not address the destructiveHint=true annotation (e.g. whether disabling stops in-flight or queued notifications), and setting an explicit true/false is arguably idempotent despite idempotentHint=false, but nothing in the text contradicts the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences: action first, parameter convention second, bulk limitation third, with the auth scope appended. No filler and nothing buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter mutation with no output schema, the description covers the module-discovery dependency, the bulk gap, and the write scope. Minor gaps remain around error behavior for invalid module/channel values and what users should expect the call to return.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3; the description goes slightly beyond by naming the discovery tool that produces valid `module` values and by restating the `enabled: true|false` contract. The account/workspace auth-selection parameters are only covered in the schema, not the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb pair (enable/disable), the exact resource (a single notification module/channel combination), and gives a concrete example (email-off for due-date reminders). It is clearly distinguishable from siblings like pm_get_notification_settings, which it explicitly points to.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says where module names come from (pm_get_notification_settings) and preempts the obvious wrong assumption by stating there is no bulk endpoint and that bulk changes require repeating the call per channel. This is when-to-use guidance plus an explicit non-alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_update_sprintA
Destructive
Inspect

Full update of sprint name, goal, and date window. NOTE: this is a PUT, not a PATCH — fields you omit may be cleared by the backend. Pass every field you want to keep. API-key scope: sprints:write.

NameRequiredDescriptionDefault
goalNoMax 5000 chars
nameNoMax 200 chars
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
endDateNoISO-8601 instant
startDateNoISO-8601 instant
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
sprintIdentifierYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite annotations already flagging destructiveHint=true, the description concretely explains the danger mechanism: fields omitted may be cleared by the backend, so callers must resend everything they want preserved. It also discloses the required API-key scope `sprints:write`, adding auth context the annotations don't carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences: what it does, the critical PUT caveat, and the auth scope. The most consequential warning is front-loaded second and nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter destructive mutation with no output schema, the description supplies the two things an agent can't infer: the replace-not-merge semantics and the write scope. Account/workspace routing is already documented in the schema, so nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 86%, so the baseline is 3; the description lifts it by reframing the optional fields (name, goal, dates) as effectively all-or-nothing due to PUT semantics, which is semantic information the schema's per-field descriptions do not convey. It doesn't address sprintIdentifier, account, or workspace, but the schema covers those well.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource plus the exact fields affected: "Full update of sprint name, goal, and date window." That clearly separates it from neighboring sprint tools like pm_start_sprint, pm_complete_sprint, and pm_get_sprint, which do different things to the same entity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The PUT-vs-PATCH note gives explicit operational guidance ("Pass every field you want to keep"), which tells the agent how to invoke it safely. It does not name alternative tools or state when to prefer pm_complete_sprint/pm_start_sprint instead, so it falls short of full when-to-use coverage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_update_tagA
Destructive
Inspect

Rename or recolor an existing tag. All updatable fields are optional — pass only what you want to change. The tag identifier stays the same; any task already tagged keeps the new name and colors automatically. API-key scope: tags:write.

NameRequiredDescriptionDefault
nameNoNew display name
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
textColorNoNew hex foreground color
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
identifierYesTag identifier (tag_…)
backgroundColorNoNew hex background color

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations it discloses real behavioral facts: the identifier is immutable, tasks already tagged inherit the new name/colors automatically, and writes require the `tags:write` scope. Given destructiveHint=true and idempotentHint=false are already declared, this adds meaningful context; it does not contradict them (renaming is a write, but no identifier is replaced).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the action, then the optionality rule, then the propagation behavior and scope. Nothing is redundant or padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With six parameters, full schema coverage, annotations, and no output schema, the description gives enough to call the tool correctly: which fields change, that the identifier is stable, side effects on tagged tasks, and required scope. Return-shape detail is not needed since there is no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter (including account/workspace scoping and the color fields) is already documented in the schema. The description only reinforces the optionality semantics, which is the expected baseline when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb + resource (rename/recolor an existing tag), which naturally separates it from pm_create_tag, pm_get_tag and pm_delete_tag. It does not explicitly name or contrast with any sibling, keeping it just below the top mark.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"All updatable fields are optional — pass only what you want to change" gives a clear operating rule for partial updates, and the API-key scope `tags:write` tells the agent what is required. There is no explicit statement of when to use this versus pm_create_tag or pm_delete_tag, so it stops short of 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_update_taskA
Destructive
Inspect

Partial-update a task by ref. Only fields present in the call are changed. Pass an explicit null to clear nullable fields (dueDate, parent, taskType, etc.). Names resolve leniently against the current effective set. To change just the type and nothing else, prefer this with taskType set; use pm_bulk_change_task_type when changing many tasks at once. API-key scope: tasks:write.

NameRequiredDescriptionDefault
refYesTask key or identifier
listNoMove to another list
tagsNo
levelNo
titleNo
nextToNo
parentNoRe-parent (or null to detach)
statusNo
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
dueDateNo
priorityNo
taskTypeNoTask type name (e.g. "Bug"); pass null to clear and make the task untyped
assigneesNo
isPrivateNo
startDateNo
timeSpentNoMinutes
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
descriptionNo
customFieldsNo
estimatedTimeNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and openWorldHint=true, so the description's job is to say what is destructive — and it does: passing explicit null wipes nullable fields (dueDate, parent, taskType). It adds lenient name resolution behavior and the required API-key scope (`tasks:write`), 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five tight sentences, front-loaded with the partial-update contract, zero filler, and the sibling routing placed near the end where it belongs. The one soft spot is "Names resolve leniently against the current effective set," which is compact but under-defined.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 20-parameter destructive mutation with no output schema, the description covers the essentials an agent needs to avoid mistakes: partial semantics, null-clearing, sibling routing, and auth scope, with account/workspace handled in the schema. What is missing is guidance on the nested customFields object and the ordering/date formats for the many nullable string fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 20 parameters and only 35% schema description coverage, the description must carry weight, and it does explain the cross-cutting null/omit distinction plus taskType's special case. But roughly a dozen parameters (status, priority, level, nextTo, assignees, customFields, estimatedTime, isPrivate, tags, description, startDate, list) get no semantic guidance in either place, so the compensation is partial.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Partial-update a task by ref" gives a specific verb, resource, and update model in one clause, and the description explicitly contrasts itself with pm_bulk_change_task_type. An agent can distinguish this from pm_create_task, pm_get_task, and the bulk-type sibling without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the routing rule outright: use this with `taskType` for a single-task type change, use `pm_bulk_change_task_type` when changing many tasks at once. It also states the partial-update contract (only fields present change) and the allowlist condition for clearing values, which tells the agent how to structure the call rather than leaving it to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_update_task_commentA
Destructive
Inspect

Update an existing comment. Only the original author may edit. API-key scope: tasks:write.

NameRequiredDescriptionDefault
refYesOwning task key or identifier
textYes
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
mentionsNo
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
commentIdentifierYesComment identifier (cmt_…)

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the generic mutation profile (readOnlyHint=false, destructiveHint=true, idempotentHint=false); the description adds real context beyond them: author-only authorization and the `tasks:write` scope requirement. It does not disclose whether `text` replaces or appends to the existing body, which matters for a destructive update.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action, then the authorization rule, then the scope requirement. No filler and nothing to trim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-param mutation tool with no output schema, the description covers the two things an agent most needs to know before calling: who is allowed and what credential scope is required. The remaining hole is the semantics of `text`/`mentions`, 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%, with `text` and `mentions` entirely undocumented in both schema and description. The description says nothing about parameters, so it neither compensates for those gaps nor clarifies whether text is a full replacement or a patch — baseline 3 fits the partial coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Update an existing comment') that clearly distinguishes it from pm_create_task_comment and pm_delete_task_comment by verb alone. It does not explicitly name those siblings, but an agent can pick it without inspecting schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Adds a genuine precondition ('Only the original author may edit') and the required API scope, which helps decide if a call will succeed. However, it gives no guidance on when to use this versus pm_create_task_comment or a reaction tool, and no fallback behavior when the caller is not the author.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_update_teamA
Destructive
Inspect

Update a team's metadata or replace its full member list. All fields are optional — only specified fields change. NOTE: memberUuids, if present, REPLACES the existing membership (not appends). Use pm_add_team_member / pm_remove_team_member for incremental changes. Requires the workspace MANAGE_TEAMS permission. API-key scope: teams:write.

NameRequiredDescriptionDefault
iconNoIcon identifier or emoji
nameNoDisplay name (max 100 chars)
aliasNoShort alias / @handle (max 100 chars)
colorNoHex color, e.g. "#E91E63"
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
identifierYesTeam identifier (team_…)
descriptionNoOptional description (max 10000 chars)
memberUuidsNoCOMPLETE replacement list of member UUIDs. Omit to leave membership unchanged.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, it discloses that memberUuids replaces the existing membership rather than appending, which is critical destructive behavior. It also states the required MANAGE_TEAMS permission and teams:write API-key scope.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short, front-loaded, and every sentence adds useful information. The NOTE about memberUuids is placed prominently where an agent will notice it before acting.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the critical invocation details: optional-field behavior, destructive membership replacement, alternatives, permissions, and scope. With no output schema, it does not describe the return value, but the core invocation guidance is otherwise complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all parameters in detail. The description adds meaningful emphasis on the destructive replacement semantics of memberUuids and the fact that all fields are optional, but it does not clarify the other parameters beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: it updates a team's metadata or replaces its full member list. It also distinguishes the membership-replacement behavior from the sibling tools pm_add_team_member and pm_remove_team_member.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says to use pm_add_team_member / pm_remove_team_member for incremental membership changes, and clarifies that only specified optional fields change. This gives clear when-to-use and alternative guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_update_viewA
Destructive
Inspect

Update a view, including the auto-created primary List view when finishing list setup. Configure useful column order, grouping, and sorting instead of leaving a defaults-only view. filters / columns use FilterGroupDTO / ColumnOrderItem shapes. Sending columns replaces the entire selection/order: include every native and custom field that should remain visible. Use raw custom-field identifiers from pm_get_workspace_context. Header icons belong in custom-field emoji/color metadata. Read back the rich resource-view configuration for verification; Lite GET/list responses omit columns and filters. API-key scope: views:write.

NameRequiredDescriptionDefault
nameNo
sortByNo
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
columnsNoColumn order items
filtersNoFilter groups (FilterGroupDTO shape)
groupByNo
isPrivateNo
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
identifierYes
sortDirectionNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds substantial behavior beyond the annotations: sending columns replaces the entire selection/order, so every native and custom field that should remain visible must be included. It also discloses the API-key scope `views:write`, tells the agent to use raw custom-field identifiers from pm_get_workspace_context, and notes that header icons belong in custom-field metadata rather than view configuration.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but front-loaded, starting with the core action and scope before moving into configuration details and verification guidance. Most sentences earn their place, though the paragraph is longer than typical and could be slightly tighter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, non-idempotent mutation with no output schema, the description covers the highest-risk behavior, verification path, permission scope, and DTO formats. It is not fully complete for all 10 parameters, but an agent has enough information to use the tool safely and correctly in the common case.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only 40% schema description coverage and 10 parameters, the description carries extra burden. It usefully explains that filters and columns use FilterGroupDTO and ColumnOrderItem shapes and clarifies the replacement semantics of columns, but it leaves sortBy, groupBy, sortDirection, isPrivate, and identifier meaning largely to inference.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Update a view', and immediately extends scope to the auto-created primary List view used during list setup. It distinguishes the tool from default-only views and from Lite GET/list responses, so an agent can tell what this tool uniquely does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear usage context: use this to configure column order, grouping, and sorting instead of leaving a defaults-only view, and read back the rich resource-view configuration for verification because Lite GET/list responses omit columns and filters. It does not explicitly name pm_create_view or other sibling alternatives, keeping it from a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pm_update_webhookA
Destructive
Inspect

Partial-update a webhook subscription. Only fields present in the call are changed (pass-through PATCH-style semantics). Use active: false to pause deliveries without deleting. Updating eventTypes replaces the full subscribed set. Does not return or rotate the HMAC secret. API-key scope: webhooks:write.

NameRequiredDescriptionDefault
urlNo
nameNo
activeNoToggle delivery on/off without deleting
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
eventTypesNoReplacement event-type list (dash-cased)
webhookIdentifierYesWebhook identifier

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavior the annotations cannot convey: partial update semantics, that eventTypes replaces rather than appends, that the HMAC secret is neither returned nor rotated, and the required `webhooks:write` API-key scope. For a destructive, non-idempotent, open-world tool these are exactly the details an agent needs before invoking.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences, front-loaded with the verb and the biggest ambiguity (partial vs full update). Every clause carries a distinct fact — mutation model, pause idiom, replacement semantics, secret handling, auth scope — with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Complete enough to call correctly: mutation semantics, secret behavior, and auth scope are all covered, and no output schema exists so return values need not be explained. The only omission is any note on failure modes or validation of url/eventTypes, which is minor given the schema's own descriptions for account/workspace.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 71%, so the schema already documents most parameters. The description still adds meaning at the schema level: absent fields are left untouched, and eventTypes is a full replacement rather than a merge — the latter restated from the schema, but the partial-update rule is genuine added semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Partial-update a webhook subscription") and immediately qualifies the mutation model as pass-through PATCH-style. This clearly separates it from pm_create_webhook, pm_delete_webhook, and pm_get_webhook siblings without naming them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives actionable routing guidance: use `active: false` to pause deliveries instead of deleting, which points the agent away from pm_delete_webhook for a common intent. It does not mention pm_get_webhook for reading state first or pm_get_webhook_usage, so the alternative-selection story is incomplete but the key non-obvious case is covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whoamiA
Read-onlyIdempotent
Inspect

Unified Dutify whoami: fresh credential/workspace discovery. Does not require a selected workspace or reserve quota.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, idempotent, and non-destructive behavior. The description adds that it requires no selected workspace and does not reserve quota, which is useful beyond annotations, but it does not describe return shape or discovery failure modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short, front-loaded sentences with no wasted text. The core purpose comes first and the workspace/quota caveat follows immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only discovery tool with full parameter descriptions and annotations, the description is nearly complete. It could say more about what the discovery returns, but the complexity is low and no output schema is expected.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage for both optional parameters, so the heavy lifting is already done in structured data. The description adds no parameter-specific syntax or selection guidance, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies a concrete discovery operation: "fresh credential/workspace discovery" via `whoami`. It is clear enough to distinguish from most task tools, but it does not explicitly contrast with close siblings such as `list_accounts`, `list_workspaces`, or `find_my_workspace`.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides a usage context by saying no selected workspace or quota reservation is required, which implies it is useful in unconfigured or discovery scenarios. However, it does not explicitly state when to use this tool instead of `list_accounts`, `list_workspaces`, or `find_my_workspace`.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wiki_check_public_slugA
Read-onlyIdempotent
Inspect

Check whether a public URL slug is available and validly formatted for a space, before publishing. Returns a SlugAvailabilityDTO. Call this when choosing a customSlug for wiki_set_public_settings. Requires space admin. API-key scope: wiki:spaces:read.

NameRequiredDescriptionDefault
slugYesCandidate public slug (e.g. "my-docs")
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
spaceKeyYesUppercase space key
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world); the description adds the two things annotations cannot convey: space-admin permission requirement and the API-key scope `wiki:spaces:read`. It does not disclose how a taken/duplicate slug is reported (return payload flag vs. tool error), which is the one behavior an agent most needs here.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with the core check and followed by return, invocation trigger, and permissions/scope. Little waste, though "Returns a SlugAvailabilityDTO" is a typename that conveys structure but not meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the burden of explaining the return value, and "Returns a SlugAvailabilityDTO" does not say what the agent will learn (available boolean, formatting error reason, suggested alternative). For a pre-flight validation tool that is a meaningful gap, even though permissions, scope, and invocation context are well covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3; the description adds real meaning by tying the `slug` parameter to the `customSlug` concept in wiki_set_public_settings, clarifying that it is a candidate public URL segment rather than an internal page slug. It does not add anything on `account` or `workspace`, but those are already well documented in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (check) and resource (public URL slug) plus the two things checked: availability and formatting validity, scoped to a space. It also names the sibling it is consumed alongside (wiki_set_public_settings), so an agent can distinguish it from other wiki_* 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Call this when choosing a `customSlug` for wiki_set_public_settings" gives an explicit trigger and names the companion tool, which is strong routing guidance. It stops short of saying when NOT to call it (e.g. for an already-published slug, or that it is a pre-flight check only and does not reserve the slug), 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.

wiki_confirm_attachmentA
Destructive
Inspect

Step 3 of uploading: confirm that the bytes were successfully PUT to the presigned uploadUrl, activating the attachment. Returns the WikiAttachmentDTO (status becomes "confirmed"). Call only after the byte PUT succeeded. API-key scope: wiki:attachments:write.

NameRequiredDescriptionDefault
pageIdYesPage UUID
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
attachmentIdYesAttachment UUID from wiki_request_attachment_upload

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructive/non-idempotent/open-world, but the description adds genuine context beyond them: the required API-key scope (`wiki:attachments:write`), the return type (WikiAttachmentDTO), and the resulting status value. It leaves the behavior of a duplicate confirmation undefined, which is the main residual gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the step position and action, followed by the return value and the call precondition. Nothing is redundant or padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a flow-dependent mutation with no output schema, the description supplies the state transition, the return type, the auth scope, and the ordering constraint. It stops short of describing failure modes (e.g., confirming without a completed PUT, or repeated confirmation), which leaves a small gap for a destructive, non-idempotent tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters are already documented, and the description adds no syntax or format details. It only reinforces that attachmentId originates from wiki_request_attachment_upload, which the schema states verbatim. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names the specific verb (confirm), the resource (attachment), and situates it precisely as step 3 of the upload flow, including the state transition it triggers (status becomes "confirmed"). An agent can distinguish it from wiki_request_attachment_upload and wiki_delete_attachment without inspecting schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States an explicit precondition: "Call only after the byte PUT succeeded," which pins the ordering in the three-step flow. It does not explicitly name the sibling that produces the uploadUrl, though the reference to the presigned URL makes the linkage inferable. No explicit when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wiki_create_pageAInspect

Create a wiki page under a space. Pass EITHER markdown (simpler, server converts to TipTap) OR content (TipTap/ProseMirror JSON, mutually exclusive with markdown). Use content when you need rich features that markdown can't express — banners, collapsibles, mermaid diagrams, action buttons, inline labels, mentions, code blocks with language, etc. For the full TipTap doc shape and a copy-friendly reference of every node and mark, call get_endpoint_examples with tag="Wiki Pages (Lite)" (and optionally name="full-tiptap"). Optional parent slug to nest under another page. Returns the created page DTO. Page results include webUrl: a browser link requiring normal workspace access. Use it for citations; it does not make the page public. API-key scope: wiki:pages:write.

NameRequiredDescriptionDefault
iconNoOptional icon/emoji (e.g. "rocket")
titleYes
parentNoOptional parent page slug
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
contentNoPage body as TipTap/ProseMirror JSON. Use for rich content that markdown doesn't support (banners, collapsibles, mermaid, action buttons, inline labels, mentions). Mutually exclusive with `markdown`. Call get_endpoint_examples(tag="Wiki Pages (Lite)") for the full doc shape.
markdownNoPage body as Markdown. Mutually exclusive with `content`.
spaceKeyYes
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare non-read-only, non-destructive, non-idempotent behavior. The description adds real value beyond that: it states the return (created page DTO), clarifies that webUrl is not a public link and requires normal workspace access, and names the required API-key scope `wiki:pages:write`. It doesn't disclose failure modes (e.g., slug collisions) or whether retries create duplicates, which would push this higher for a non-idempotent create.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and the most consequential decision (which body format to pass). It is dense but nearly every clause carries information; the only slack is the repeated restatement of the markdown/content exclusivity that also appears in the parameter descriptions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly covers the return value and the meaning of webUrl, and it names the auth scope required for the call. The main remaining gap is error semantics for a non-idempotent create, but for this tool's complexity it is largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75%, so most parameters are documented. The description adds semantic meaning the schema only partially conveys: the markdown/content mutual exclusivity and the concrete feature set (banners, collapsibles, mermaid, mentions) that justifies choosing the heavier JSON form, plus the purpose of the parent slug for nesting. The icon, account, and workspace parameters are left entirely to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource+scope: "Create a wiki page under a space." An agent can distinguish this immediately from siblings like wiki_update_page, wiki_move_page, or wiki_create_space without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly routes between the two body modes (markdown vs content) and states when to prefer each, plus points at get_endpoint_examples for the TipTap shape. It doesn't explain when to use this tool rather than wiki_update_page or wiki_create_space, so usage guidance is strong but not fully exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wiki_create_spaceAInspect

Create a new wiki space in the current workspace. key is the unique short identifier used in URLs and subsequent API calls — uppercase letters + digits only, 2-20 chars, must start with a letter (e.g. "DOCS", "ENG2"). name is the human display name. Defaults: isPublic: true (INTERNAL visibility — all workspace members can view), isEditPublic: false. NOTE: isPublic is internal workspace visibility ONLY; it does NOT publish the space to the public web — use wiki_set_public_settings for that. Requires workspace-level edit access. API-key scope: wiki:spaces:write.

NameRequiredDescriptionDefault
keyYesUppercase alphanumeric key, 2-20 chars, must start with a letter
iconNoEmoji name (e.g. "rocket") or "icon:<PhosphorName>" (e.g. "icon:BookOpen"). Valid names: GET /v1/custom-field-icon-options (emojiNames bare; iconNames with the "icon:" prefix).
nameYesDisplay name, max 200 chars
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
isPublicNoINTERNAL visibility — all workspace members can view (default true). NOT public-web publishing; use wiki_set_public_settings to publish.
iconColorNoIcon color hex code (only for non-emoji icons)
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
descriptionNoOptional description, max 2000 chars
isEditPublicNoEditable by all workspace members (default false)

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds real context beyond the annotations: key uniqueness and format constraints, the semantics and defaults of isPublic/isEditPublic, the required permission level, and the scope string. The non-idempotent implication (unique key) and the internal-vs-public distinction are exactly what an agent needs before mutating.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action, then key constraints, then the visibility caveat that prevents the most likely misuse. Dense but every sentence carries a fact the schema does not: URL identifier role, permission requirement, scope.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-param creation tool with no output schema, it covers naming rules, defaults, permissions and scope. It never says what comes back (space id) or what happens on a duplicate key, which would be the last piece needed for confident follow-up calls.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3; the description still adds value by explaining that `key` is the identifier used in URLs and later calls (with examples) and that `name` is the display name, plus explicit defaults for the two booleans. It leaves `icon`, `iconColor`, `workspace`, `account`, `description` to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Create a new wiki space") with scope ("in the current workspace"), and explicitly distinguishes the visibility effect from the sibling wiki_set_public_settings. An agent can pick this over wiki_update_space / wiki_delete_space without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the alternative for public publishing (wiki_set_public_settings) and states the prerequisite (workspace-level edit access) plus the API-key scope. It does not spell out when to use a new space versus a page/folder under an existing space, so a small routing gap remains.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wiki_delete_attachmentA
Destructive
Inspect

Permanently delete an attachment and its stored file (returns 204). Useful for cleaning up unused or leftover uploads. This does not remove image nodes that still reference it in a page body — update the page content separately if needed. API-key scope: wiki:attachments:write.

NameRequiredDescriptionDefault
pageIdYesPage UUID
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
attachmentIdYesAttachment UUID to delete

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=false; the description adds valuable behavior beyond that: the deletion is permanent, it removes the stored file, it returns 204, and it does not update referencing image nodes in page bodies. It also discloses the required API-key scope (`wiki:attachments:write`).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three compact sentences, front-loaded with the core action and response code. Each sentence earns its place by covering permanence/return value, the cleanup use case, the referential-integrity caveat, and auth scope.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive delete tool with no output schema, the description covers the essential missing pieces: permanence, 204 response, the caveat about dangling image references, and required API-key scope. The schema fully documents parameters and account/workspace behavior, so nothing critical is left unexplained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all four parameters, including pageId, attachmentId, account, and workspace. The description does not add parameter-specific syntax or meaning beyond contextualizing that the attachment belongs to a page body when discussing leftover image nodes. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource+effect: 'Permanently delete an attachment and its stored file (returns 204).' It also distinguishes the operation from page-content changes by noting that referencing image nodes are not removed. An agent can identify the operation and its scope without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear use case ('cleaning up unused or leftover uploads') and an important exclusion: this does not remove image nodes that still reference the attachment, and page content must be updated separately. It stops short of explicitly naming sibling tools like wiki_update_page, but the implied alternative is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wiki_delete_pageA
Destructive
Inspect

Archive (soft-delete) or permanently delete a wiki page by slug. Falls through to the non-lite Wiki Pages API since there is no lite delete endpoint — path is DELETE /v1/workspaces/{workspaceIdentifier}/wiki/spaces/{spaceKey}/pages/{slug} with optional ?permanent=true. Default behavior archives the page (soft delete); pass permanent: true to hard-delete (requires admin access). Returns 204 on success. API-key scope: wiki:pages:write.

NameRequiredDescriptionDefault
slugYesSlug of the page to delete
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
spaceKeyYes
permanentNoIf true, permanently deletes instead of archiving. Requires admin access.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the destructiveHint=true annotation by disclosing that the default is a soft-delete archive and that hard delete requires admin access and ?permanent=true, plus the 204 success code and required API-key scope. It does not cover recovery of archived pages, error behavior for missing slugs, or whether repeated calls are safe, which is why it is not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences front-load the core action and mode split, then the default behavior, then the endpoint details. The verbatim API path is useful for diagnosing failures but is the least essential clause.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description supplies the 204 return code so the agent knows there is no payload to parse, and it covers the admin and scope prerequisites for the destructive path. Missing only edge-case behavior (page not found, already archived), which is minor for a 5-parameter delete tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 80% and the schema already documents slug, permanent, account and workspace in detail. The description mostly restates the `permanent` semantics and the URL path rather than adding new meaning, though tying `permanent` to the ?permanent=true query and the admin gate gives some reinforcement. Baseline 3 is appropriate given the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (archive/delete) and resource (wiki page by slug) and immediately distinguishes the two modes of operation (soft vs hard delete). An agent can tell exactly what this does and how it differs from wiki_update_page or wiki_delete_space without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly explains the decision point between the default archive and permanent delete, plus the admin prerequisite for the hard-delete path. It does not name sibling alternatives (e.g., why not wiki_move_page to a trash space) or state when deletion is inappropriate, so it stops short of explicit when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wiki_delete_spaceA
Destructive
Inspect

PERMANENTLY delete a wiki space AND every page inside it. Requires admin access to the space. This is destructive — surface a clear confirmation to the user before calling. Returns 204. API-key scope: wiki:spaces:write.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
spaceKeyYesUppercase space key
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the destructiveHint/readOnlyHint annotations: discloses the cascade (all pages deleted), the admin access requirement, the expected 204 response, and the required API-key scope. Those are exactly the facts an agent needs before an irreversible call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, zero filler, with the permanence and cascade front-loaded before the prerequisites. Every sentence carries actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description states the 204 return, and it covers access requirements, scope, and irreversibility for a high-risk mutation. Nothing material is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and each of the three parameters is documented inline, including the spaceKey case requirement and account/workspace fallback behavior. The description adds no parameter-level meaning, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('PERMANENTLY delete a wiki space'), plus the cascade scope ('AND every page inside it') that separates it from wiki_delete_page. An agent can distinguish it from any sibling without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a real precondition ('Requires admin access to the space') and an interaction rule ('surface a clear confirmation to the user before calling'). It doesn't name the narrower alternative (wiki_delete_page) for single-page removal, so it stops short of full when/when-not routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wiki_disable_page_shareA
Destructive
Inspect

Disable the public share link for a single page, revoking access via its URL (returns 204). Requires edit access. API-key scope: wiki:pages:write.

NameRequiredDescriptionDefault
slugYesPage slug
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
spaceKeyYesUppercase space key
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, and the description adds real value beyond them: the 204 response code, the edit-access requirement, and the required API-key scope. It doesn't address what happens when the page has no active share, which matters given idempotentHint=false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with the action front-loaded, followed by effect, then preconditions and scope. Nothing is wasted and nothing important is buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter mutation with no output schema, the description covers action, consequence, auth requirement, scope, and response code, and annotations carry the safety profile. Only the no-op/already-disabled case is left unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so spaceKey, slug, account, and workspace are fully documented in the schema. The description only implies the page is identified by space+slug and adds 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb + resource ('Disable the public share link for a single page') plus the consequence ('revoking access via its URL'). It is trivially distinguishable from wiki_enable_page_share, wiki_get_page_share, and wiki_check_public_slug.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the precondition ('Requires edit access') and the effect, which is enough context to decide to call it. It doesn't explicitly name the counterpart tool to re-enable sharing or say what to do if no share exists, 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.

wiki_enable_page_shareA
Destructive
Inspect

Enable a public SHARE LINK for a single page, returning a PublicShareInfoDTO with the publicUrl to hand out. Optional token sets a custom URL slug (3-100 chars, lowercase letters/digits/hyphens; 409 if already taken — omit to auto-generate). Optional showAuthor toggles author display. ⚠️ OUTWARD-FACING: anyone with the link can read this page — confirm with the user before enabling. Requires edit access. API-key scope: wiki:pages:write.

NameRequiredDescriptionDefault
slugYesPage slug
tokenNoOptional custom URL token (3-100 chars, lowercase a-z, 0-9, hyphens). Omit to auto-generate.
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
spaceKeyYesUppercase space key
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
showAuthorNoShow the author on the public page

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructive and open-world behavior, but the description adds meaningful operational context: anyone with the link can read the page, user confirmation is advised, edit access is required, and the API-key scope is `wiki:pages:write`. It also discloses the 409 conflict for taken tokens and the auto-generation behavior when `token` is omitted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a compact paragraph that front-loads the core action and return value, then covers optional parameters, the public-exposure warning, permissions, and scope. Every sentence contributes useful information without unnecessary repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with rich annotations and a fully described schema, the description is nearly complete: it states the result shape, exposure risk, permissions, scope, and token conflict behavior. One gap is that it does not state what happens if the page is already shared, which matters because the annotations mark the tool as non-idempotent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all six parameters, including `token`, `showAuthor`, `account`, and `workspace`. The description adds a useful 409 conflict detail for `token`, but otherwise mostly repeats schema-level parameter information and does not explain `account` or `workspace` behavior further.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: enabling a public share link for a single page. It also states the return value (`PublicShareInfoDTO` with `publicUrl`), making the tool's outcome clear. The verb 'Enable' contrasts sufficiently with sibling tools such as `wiki_disable_page_share` and `wiki_get_page_share`.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context: confirm with the user before enabling because the page becomes publicly readable, and edit access is required. It does not explicitly route the agent to alternatives such as `wiki_check_public_slug` when choosing a custom token, but the core when-to-use guidance is strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wiki_get_pageA
Read-onlyIdempotent
Inspect

Get a wiki page by slug within a space. Default format is Markdown (the body is returned under the markdown field); pass format="tiptap" for raw ProseMirror JSON. Page results include webUrl: a browser link requiring normal workspace access. Use it for citations; it does not make the page public. API-key scope: wiki:pages:read.

NameRequiredDescriptionDefault
slugYesPage slug
formatNoBody format (default: markdown)
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
spaceKeyYes
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely new behavior: default Markdown output with the body under the `markdown` field, tiptap for raw ProseMirror JSON, webUrl requiring normal workspace access, and the required API-key scope. It omits error behavior for a missing slug/space, which keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, purpose front-loaded and no filler; each sentence carries operational detail. The API-key scope line is somewhat boilerplate but still actionable for auth setup.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly steps in to describe the return shape (markdown field, webUrl) and the format switch, and account/workspace selection is already handled in the schema. What's missing is disambiguation from wiki_search/wiki_retrieve and any not-found behavior for a five-parameter read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 80%, so the baseline is 3, and the description earns a bump by explaining what `format="tiptap"` actually yields (raw ProseMirror JSON) and that the markdown body lands in a named field. It also implies the spaceKey scoping for the slug lookup, which the schema leaves undescribed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource plus its addressing scheme: get a wiki page by slug within a space. The body format behavior and the returned fields are named immediately, so an agent knows 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a positive use case ("Use it for citations") and an explicit exclusion ("it does not make the page public"), which usefully separates it from the share/public sibling tools. It does not, however, name alternatives such as wiki_search or wiki_retrieve for cases where the caller lacks a slug or wants full-text lookup.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wiki_get_page_shareA
Read-onlyIdempotent
Inspect

Get the public SHARE-LINK status for a single page (PublicShareInfoDTO): isEnabled, publicToken, publicUrl (the shareable link), showAuthor, sharedAt, sharedBy, workspaceAllowsSharing. A per-page share link lets anyone with the URL read just that one page — distinct from publishing a whole space (wiki_set_public_settings). Requires edit access. API-key scope: wiki:pages:read.

NameRequiredDescriptionDefault
slugYesPage slug
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
spaceKeyYesUppercase space key
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safe-read profile (readOnly, idempotent, non-destructive), and the description adds real context: edit-access requirement, API-key scope `wiki:pages:read`, and the semantic meaning of the link ('anyone with the URL can read just that one page'). It omits failure modes (e.g. behaviour when sharing is disabled or the page is missing), which keeps it below 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the verb and resource, then the return shape, the scoping distinction, and the auth prerequisites in one tight paragraph. The DTO field enumeration is long but earns its place given there is no output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by enumerating the returned PublicShareInfoDTO fields, and it covers permission requirements and API-key scope. 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so spaceKey, slug, account and workspace are already documented. The description adds no syntax or format guidance for these parameters (e.g. slug derivation, case sensitivity of spaceKey), so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get the public SHARE-LINK status for a single page') and explicitly scopes it as a per-page share link rather than a space-wide setting. It names the sibling it is distinct from (wiki_set_public_settings), so an agent can route correctly without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context: read a single page's share-link state, distinct from publishing a whole space via wiki_set_public_settings, and requires edit access. It does not point to wiki_enable_page_share/wiki_disable_page_share for mutation, nor does it state when not to use it, 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.

wiki_get_public_settingsA
Read-onlyIdempotent
Inspect

Get a space's PUBLIC-WEB publishing settings (PublicSpaceSettingsDTO): isEnabled (is the space published to the public internet), customSlug (public URL slug), allowedEmojis, showReactions, showPageViews, showLastUpdated, showAuthor, viewMode ("space"|"helpcenter"), heroTitle, heroSubtitle. This is SEPARATE from the space's isPublic flag, which is internal workspace visibility only. Requires space admin. API-key scope: wiki:spaces:read.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
spaceKeyYesUppercase space key
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive and closed-world, so the safety bar is pre-cleared. The description adds genuinely non-redundant behavior: an admin privilege requirement, an API-key scope, and a semantic warning that `isPublic` is a different concept — all of which prevent misuse.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose, then the returned fields, then the disambiguation, then the access requirements — a logical order with no filler. The field enumeration is long but earns its place because there is no output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, enumerating the returned DTO fields is exactly the missing information an agent needs to interpret results. Access requirements, scope, and the conceptual distinction from `isPublic` are all covered, leaving nothing material unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so `spaceKey`, `account`, and `workspace` are fully documented in the schema already. The description contributes nothing about parameters beyond the admin/permission framing, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (get a space's public-web publishing settings) and names the concrete DTO it returns. It also explicitly disambiguates from the `isPublic` flag, which is the natural source of confusion with sibling `wiki_get_space`, so an agent can distinguish it without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear usage context: it is the read side of public-web publishing, separate from internal workspace visibility, and requires space admin with the `wiki:spaces:read` scope. It does not explicitly name `wiki_set_public_settings` as the mutation counterpart, though the tool name makes the pairing obvious.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wiki_get_spaceA
Read-onlyIdempotent
Inspect

Fetch a single wiki space by key. Returns the WikiSpaceDTO (id, key, name, description, icon, color, cover image, visibility flags, permissions, timestamps). For the page tree inside the space, use wiki_get_space_with_pages instead. API-key scope: wiki:spaces:read.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
spaceKeyYesUppercase space key (e.g. "DOCS")
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so safety is covered. The description adds value beyond them by listing the returned DTO fields and stating the required API-key scope (`wiki:spaces:read`), which is real auth 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences: purpose first, return shape second, alternative third, with the auth scope appended. No filler and the routing cue is not buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description enumerates the DTO fields the caller gets back, names the alternative for deeper data, and states the required scope. Combined with complete schema parameter docs, an agent has everything needed to call this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all three parameters (including account and workspace) are already documented in the schema, including the uppercase-space-key format. The description only implies the spaceKey lookup and adds no syntax or semantics beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (fetch a single wiki space by key) and enumerates the returned DTO fields, so the agent knows exactly what comes back. It explicitly distinguishes itself from wiki_get_space_with_pages, preventing confusion with the closest sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the alternative tool and the condition that selects it ('For the page tree inside the space, use wiki_get_space_with_pages instead'). It doesn't address wiki_list_spaces (browsing many spaces) or wiki_retrieve, so the 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.

wiki_get_space_with_pagesA
Read-onlyIdempotent
Inspect

Fetch a wiki space AND its complete page tree in one call. Returns WikiSpaceWithPagesDTO — space metadata plus pages (a recursive tree of WikiPageTreeNodeDTO with slug, title, type=page|folder, hasChildren, children[], view count, top reactions, the caller's effectivePermission per node). Use this to render or traverse the whole space; for a single level (root or one parent's children) wiki_list_pages is lighter. API-key scope: wiki:spaces:read.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
spaceKeyYesUppercase space key
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, non-destructive, closed-world, so the bar is lower; the description still adds real context: the payload includes every node's effectivePermission for the caller and requires the `wiki:spaces:read` API-key scope. It stops short of noting tree-size/depth limits or whether the whole tree is returned unbounded, which is the main practical risk of a recursive fetch.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then return shape, then the alternative, then the scope requirement — a good ordering. The DTO field enumeration is dense but earns its place since there is no output schema; a small amount of jargon could be trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by enumerating the returned tree node fields (slug, title, type, hasChildren, children, view count, reactions, effectivePermission) and naming the required API scope. Missing only practical limits on tree size or performance that an agent would want before invoking it on a large space.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the account/workspace/spaceKey semantics are fully documented there. The description adds nothing about the parameters beyond implying space scoping, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource with scope: fetch a wiki space AND its complete page tree in one call. It names the contrasting sibling (wiki_list_pages) so an agent can distinguish the two without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says to use this to render or traverse the whole space, and that wiki_list_pages is lighter for a single level (root or one parent's children). Both the when and the alternative are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wiki_list_attachmentsA
Read-onlyIdempotent
Inspect

List every attachment on a wiki page (WikiAttachmentDTO[]): id, pageId, filename, contentType, sizeBytes, status (pending|confirmed|failed), uploadedBy/At, confirmedAt. pageId is the page UUID (from wiki_get_space_with_pages tree node id, not the slug). Use to find an attachmentId to reference or delete. API-key scope: wiki:attachments:read.

NameRequiredDescriptionDefault
pageIdYesPage UUID (tree node `id` from wiki_get_space_with_pages)
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely new context: it enumerates the returned fields with the status enum and documents the `wiki:attachments:read` API-key scope, which annotations never convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences: response contract first, then the identifier pitfall, then the permission scope. Nothing is redundant and the key constraint (UUID vs slug) is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description discharges that burden by naming the DTO and its fields, including the status enum. Auth scope and the identifier source close the remaining gaps for a simple read-only list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds a real disambiguation the schema buries: `pageId` is the page UUID taken from the wiki_get_space_with_pages tree node `id`, explicitly *not* the slug. That pitfall is worth more than a restated field list.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("List every attachment on a wiki page") and immediately names the DTO and its fields, so an agent knows exactly what comes back. It is clearly distinguished from sibling tools like wiki_delete_attachment or wiki_request_attachment_upload.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Use to find an attachmentId to reference or delete" gives concrete downstream intent that routes the agent toward wiki_confirm_attachment / wiki_delete_attachment. It does not explicitly state when not to use it or name the confirm/delete tools by name, so it is slightly short of full alternative coverage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wiki_list_pagesA
Read-onlyIdempotent
Inspect

List wiki pages in a space. Without parent returns root-level pages; pass a parent slug to list that page's children. Response items have slug, title, status, type (page|folder), parentSlug, updatedAt — no bodies. Page results include webUrl: a browser link requiring normal workspace access. Use it for citations; it does not make the page public. API-key scope: wiki:pages:read.

NameRequiredDescriptionDefault
limitNoMax results (default 100, max 500)
parentNoOptional parent page slug
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
spaceKeyYesSpace key (from list_spaces)
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive, closed-world, so the bar is lower — yet the description adds substantial context: exact response field set, absence of page bodies, that webUrl requires normal workspace access and does not make the page public, and the required API-key scope `wiki:pages:read`.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences, front-loaded with the operation and the branching behavior before diving into return fields and auth scoping. No filler or restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description compensates by enumerating returned fields and clarifying what is absent (bodies) and what webUrl implies. Combined with annotations and full schema coverage, an agent has everything needed to call this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds real semantic value for `parent` (it selects the child listing mode rather than merely filtering) and explains what the call returns per result. Limit and account/workspace parameters are left entirely to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('List wiki pages in a space') and immediately defines the root-vs-children behavior, which distinguishes it from wiki_get_page, wiki_search, and wiki_get_space_with_pages without requiring schema inspection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit conditional guidance: omit `parent` for root-level pages, pass a parent slug for children, and notes the citation use case. It does not explicitly name sibling alternatives (e.g. wiki_search for text matching or wiki_get_space_with_pages for a tree), leaving that routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wiki_list_spacesA
Read-onlyIdempotent
Inspect

List every wiki space the caller can see in the current workspace. Each entry has the space's key (use this in subsequent calls), name, description, effectivePermission (view/edit/admin), and canView/canEdit/canAdmin booleans for quick gating. Call this first when an agent needs to figure out which space a wiki action should target. API-key scope: wiki:spaces:read.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this as read-only, idempotent, non-destructive, and closed-world, and the description adds useful context beyond them. It documents the returned entry fields, permission booleans for gating, and the required API-key scope.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded, starting with what the tool lists before covering returned fields, intended usage, and auth scope. Every sentence adds useful information without repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although there is no output schema, the description explains the fields returned for each space, including the key and permission flags. Combined with the annotations and fully described input schema, an agent has enough information to call and use this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already explains the account and workspace parameters in detail. The description does not add parameter-specific guidance beyond noting that the tool operates in the current workspace, so the baseline score applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb and resource: list every wiki space visible to the caller in the current workspace. It also clarifies the key's use in subsequent calls, which distinguishes this discovery tool from single-space tools like wiki_get_space.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says to call this first when an agent needs to determine which space a wiki action should target, giving clear usage context. It does not, however, name when to use alternatives such as wiki_get_space when the space key is already known.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wiki_move_pageA
Destructive
Inspect

Move a wiki page to a new parent and/or a new space. All body fields are optional and use slugs (resolved server-side in the target space) instead of UUIDs: targetSpaceKey for cross-space moves (omit to stay in the current space); newParent is the slug of the new parent page (omit/null to move to space root); afterPage is the slug of the sibling page to insert after (omit/null to place first). Returns the moved page DTO. Page results include webUrl: a browser link requiring normal workspace access. Use it for citations; it does not make the page public. API-key scope: wiki:pages:write.

NameRequiredDescriptionDefault
slugYesSlug of the page to move
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
spaceKeyYesSource space key
afterPageNoOptional sibling page slug to insert after (omit or null to place first)
newParentNoOptional new parent page slug (omit or null to move to space root)
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
targetSpaceKeyNoOptional target space key for cross-space moves

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations already declaring destructiveHint=true and readOnlyHint=false, the description adds useful context: API-key scope is 'wiki:pages:write,' fields are resolved server-side as slugs, and the result is a moved page DTO. It does not explain secondary effects such as child-page movement, but it does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The main action is front-loaded and the optional-field semantics are packed into a compact sequence. The webUrl/citation sentence is useful but slightly tangential to the move operation, keeping it just below perfect conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the rich schema, destructive annotations, and absence of an output schema, the description covers what an agent needs: move target behavior, slug resolution, cross-space moves, placement, return value, webUrl access semantics, and required API scope.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description goes beyond the schema by clarifying that slugs are resolved server-side in the target space and by explaining the omit/null outcomes for targetSpaceKey, newParent, and afterPage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Move a wiki page to a new parent and/or a new space.' This clearly distinguishes the operation from sibling tools such as wiki_update_page, wiki_create_page, and wiki_get_page.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains the key usage scenarios for targetSpaceKey, newParent, and afterPage, including omit/null behavior for same-space moves, space-root moves, and first-position placement. It does not explicitly route the agent away from wiki_update_page, but the move-specific 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.

wiki_request_attachment_uploadAInspect

Step 1 of uploading an image/file to a wiki page. Returns { attachmentId, uploadUrl, storageKey }. AFTER calling this you MUST: (2) PUT the raw file bytes to uploadUrl with your OWN HTTP client — the MCP server cannot do this binary upload — sending the EXACT same Content-Type as contentType and a Content-Length equal to sizeBytes (both are baked into the presigned URL; a mismatch 403s); then (3) call wiki_confirm_attachment to activate it. To embed the result as an image, add a TipTap image node with no src — { type:"image", attrs:{ attachmentId, pageId, width, height, align } }, width <= ~660 and height proportional — via wiki_update_page (content payload). Do NOT embed base64 data: URIs; they render distorted. Max 25 MB; system-executable file types are rejected. pageId is the page UUID (wiki_get_space_with_pages tree node id). API-key scope: wiki:attachments:write.

NameRequiredDescriptionDefault
pageIdYesPage UUID (tree node `id` from wiki_get_space_with_pages)
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
filenameYesOriginal filename, e.g. "diagram.png"
sizeBytesYesExact file size in bytes — must match the PUT Content-Length exactly
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
contentTypeYesMIME type, e.g. "image/png" — must match the PUT Content-Type exactly

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond annotations: discloses that the MCP server cannot perform the binary PUT, that Content-Type/Content-Length must match the presigned URL or the PUT 403s, the 25 MB cap, rejection of executables, and the required API-key scope.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose and the numbered follow-up steps, and each sentence carries operational content. It is dense and long-ish, but the length is justified by the multi-step, error-prone workflow it describes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description names the returned fields (attachmentId, uploadUrl, storageKey) and covers the full success path end-to-end, leaving no gap an agent would need to guess at.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and already documents pageId/contentType/sizeBytes matching, so the description's value-add is the size ceiling and executable-type rejection tied to sizeBytes/filename, plus clarifying that pageId is the UUID from wiki_get_space_with_pages. Useful but largely reinforcing the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource+role: 'Step 1 of uploading an image/file to a wiki page', and enumerates the return shape. It is clearly distinguishable from wiki_confirm_attachment, wiki_update_page and wiki_list_attachments named in the text.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly sequences the three-step workflow, names the required follow-up tool (wiki_confirm_attachment), and includes a negative instruction ('Do NOT embed base64 data: URIs') plus where to embed the result instead (wiki_update_page TipTap node).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wiki_retrieveA
Read-onlyIdempotent
Inspect

Search the wiki by MEANING and get back the most relevant PASSAGES (chunks) with citations and relevance scores. Use this to GROUND or ANSWER a question from wiki content: it returns quotable chunkText plus the source page/section so you can cite it. Each result has pageSlug, pageTitle, spaceKey, spaceName, chunkIndex, headingPath (heading-path breadcrumb), chunkText, score (0..1, higher = more relevant), status and updatedAt. This is retrieval-augmented generation (RAG) over wiki content, NOT a page finder — to merely LOCATE or LIST pages by title/keyword use wiki_search. Defaults to the top 5 chunks; pass limit to widen. Fails open to keyword retrieval if the embedding provider is unavailable. Page results include webUrl: a browser link requiring normal workspace access. Use it for citations; it does not make the page public. API-key scope: wiki:search:read.

NameRequiredDescriptionDefault
limitNoMax chunks to return (default 5)
queryYesNatural-language question or topic to retrieve passages for
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
spaceKeyNoOptional: restrict retrieval to one space
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/idempotent annotations it discloses the default of 5 chunks, a fail-open fallback to keyword retrieval if the embedding provider is down, that webUrl still requires normal workspace access and does not publish the page, and the required API-key scope `wiki:search:read`. That is real operating 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and the sibling contrast in the first two sentences, with constraints (limit default, fail-open, webUrl, scope) layered after. It is dense and the enumeration of result fields is long, but with no output schema those fields earn their place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description enumerates the return shape (pageSlug, pageTitle, spaceKey, chunkText, score 0..1, status, updatedAt, webUrl), covers auth scoping, degradation behavior, and when not to use it. Nothing an agent needs to invoke and interpret this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents query, limit, spaceKey, account and workspace. The description mainly reinforces the limit default and adds the practical cue 'pass limit to widen,' which is useful but largely restates the schema's own default.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource with precise scope: 'Search the wiki by MEANING and get back the most relevant PASSAGES (chunks) with citations and relevance scores.' It explicitly distinguishes itself from the sibling page finder wiki_search, so an agent can route correctly without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives both directions: 'Use this to GROUND or ANSWER a question from wiki content' and the exclusion 'NOT a page finder — to merely LOCATE or LIST pages by title/keyword use wiki_search.' The alternative tool and the condition that selects it are named explicitly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wiki_set_public_settingsA
Destructive
Inspect

Publish / unpublish a space to the PUBLIC INTERNET, or update its public-site config. This is the REAL publish switch — NOT the space isPublic flag (which is internal visibility). Pass only the fields you want to change: isEnabled (true = publish to the web, false = take offline), customSlug (public URL slug — validate first with wiki_check_public_slug), allowedEmojis (string[]), showReactions, showPageViews, showLastUpdated, showAuthor, viewMode ("space"|"helpcenter"), heroTitle, heroSubtitle. Provided fields are merged onto the current settings (read-modify-write), so unspecified fields are preserved. Minimal publish: { isEnabled: true, customSlug: "my-docs" }. ⚠️ HIGH-TRUST / OUTWARD-FACING: enabling makes the space readable by ANYONE on the internet — confirm with the user before publishing. Requires space ADMIN. API-key scope: wiki:spaces:write.

NameRequiredDescriptionDefault
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
spaceKeyYesUppercase space key
viewModeNo"space" (default) or "helpcenter"
heroTitleNoHelp-center hero title (max 150 chars)
isEnabledNoPublish (true) / unpublish (false) the space to the public web
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
customSlugNoPublic URL slug (validate with wiki_check_public_slug first)
showAuthorNo
heroSubtitleNoHelp-center hero subtitle (max 250 chars)
allowedEmojisNoReaction emojis readers may use; omit = leave unchanged
showPageViewsNo
showReactionsNo
showLastUpdatedNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds substantial context beyond the annotations: read-modify-write merge semantics, the requirement for space ADMIN and the `wiki:spaces:write` scope, and an outward-facing warning that enabling exposes the space to anyone on the internet. The destructive/openWorld hints are reinforced rather than contradicted, and the merge rule is the single most important behavioral fact for a partial-update tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The critical distinction and the publish switch are front-loaded in the first sentence, and the warning is placed last for emphasis. It is dense to the point of being a wall of text, and the ten-field enumeration partially restates schema property names, but each item carries a short clarifying parenthetical so little is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 13-parameter destructive mutation with no output schema, the description covers the safety model, permissions, merge behavior, and field semantics. The remaining gap is the response shape - what the returned settings look like after a merge - which an agent may want when confirming the publish succeeded.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 69%, and the description fills the gap with actual meaning: it enumerates every configurable field with intent (isEnabled = publish/offline, customSlug = public URL), supplies an enum for viewMode that the schema itself lacks, and states the merge rule so unspecified fields are understood as preserved rather than cleared. Only the generic account/workspace plumbing is left to the schema, which documents it well.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource in capitals ("Publish / unpublish a space to the PUBLIC INTERNET"), then explicitly separates itself from a look-alike concept: "NOT the space `isPublic` flag (which is internal visibility)." An agent can pick this tool over wiki_get_public_settings or a generic space update without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit precondition chain: validate the slug with wiki_check_public_slug first, and get user confirmation before publishing. It also supplies a minimal working invocation ({ isEnabled: true, customSlug: "my-docs" }), so the agent knows both when to call it and the smallest safe payload.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wiki_update_pageA
Destructive
Inspect

Update an existing wiki page by slug. Any field left unset preserves the current value. Pass EITHER markdown OR content (TipTap/ProseMirror JSON) for the body — they're mutually exclusive. Use content for rich features (banners, collapsibles, mermaid, etc.); call get_endpoint_examples(tag="Wiki Pages (Lite)") for the full doc shape. Page results include webUrl: a browser link requiring normal workspace access. Use it for citations; it does not make the page public. API-key scope: wiki:pages:write.

NameRequiredDescriptionDefault
slugYes
titleNo
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
contentNoReplacement body as TipTap/ProseMirror JSON. Mutually exclusive with `markdown`. Call get_endpoint_examples(tag="Wiki Pages (Lite)") for the full doc shape.
markdownNoReplacement body as Markdown. Mutually exclusive with `content`.
spaceKeyYes
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds real context beyond annotations: unset fields are preserved (patch semantics), body fields are full replacements, and the wiki:pages:write scope requirement is disclosed. It also clarifies the webUrl/visibility nuance. It could say more about what destructiveHint means in practice, but the replacement semantics are covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and patch semantics, then conditional body guidance, then the citation/webUrl note. Dense but each sentence carries information; only the API-key scope line is slightly tacked on.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description helpfully notes page results include webUrl, covering the main return value. For a 7-param mutation tool it gives enough to invoke correctly, though deeper error/edge behavior is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 57% schema coverage, the description compensates by explaining the markdown/content exclusivity and directing to get_endpoint_examples for the doc shape. admin params like account/workspace are left to the schema, which is reasonable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Update) and resource (an existing wiki page) plus the addressing key (slug), which cleanly distinguishes it from wiki_create_page and wiki_update_space.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear conditional guidance on the body format: pass either `markdown` or `content`, they're mutually exclusive, and `content` is for rich features. It doesn't explicitly address when to choose this over sibling update tools, but the resource scope is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wiki_update_spaceA
Destructive
Inspect

Update a wiki space's metadata. All fields are optional — pass only what you want to change. The space key cannot be changed. Requires edit access to the space. API-key scope: wiki:spaces:write.

NameRequiredDescriptionDefault
iconNoEmoji name or "icon:<PhosphorName>". Valid names: GET /v1/custom-field-icon-options.
nameNoNew display name
accountNoMulti-account auth only: name of the account from X-Dutify-Accounts to use for this call. Ignored in single-account mode (X-API-Key header). When multiple accounts are configured and this is omitted, the call fails with ACCOUNT_REQUIRED listing the available names. list_accounts never requires a selection.
isPublicNoINTERNAL visibility (workspace members). NOT public-web publishing — use wiki_set_public_settings.
spaceKeyYesUppercase space key
iconColorNo
workspaceNoWorkspace identifier or exact name for this call. Overrides the configured workspace. For personal keys, discover candidates with list_workspaces and select explicitly. Does not change other calls or expand a workspace key's access.
descriptionNoNew description
isEditPublicNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=true and readOnlyHint=false, so mutation semantics are already known; the description adds real value beyond them by disclosing the required permission level and the `wiki:spaces:write` API scope. It omits any warning about irreversibility or what destructive effect a metadata change could have, 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, none redundant; the core partial-update behavior and the immutability constraint are front-loaded where the agent will see them first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter mutation with no output schema, the description covers the essentials an agent needs: optionality of fields, permission and scope requirements, and the one immutable identifier. Return shape and effect on unspecified fields are left implicit but are low-risk gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 78%, so the baseline is 3, and the description earns a step up by stating that all fields are optional and that spaceKey is immutable despite being required — a non-obvious constraint the schema does not express. It does not explain the visibility toggles, which remain schema-only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Update a wiki space's metadata") that is clearly distinct from siblings like wiki_update_page or wiki_set_public_settings. However, it does not name those siblings or clarify the boundary with wiki_set_public_settings, which the schema has to do instead.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides partial-update guidance ("pass only what you want to change") and a prerequisite ("Requires edit access to the space"), which implies when the tool is applicable. It gives no explicit exclusions or pointer to alternatives for visibility or naming changes.

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. 189 tool updates
    • First observedfind_my_workspace
    • First observedfr_comment_bug
    • First observedfr_comment_request
    • First observedfr_create_bug
    • First observedfr_create_request
    • First observedfr_delete_bug
    • First observedfr_delete_request
    • First observedfr_get_bug
    • First observedfr_get_request
    • First observedfr_list_bugs
    • First observedfr_list_requests
    • First observedfr_moderate_bug
    • First observedfr_moderate_request
    • First observedfr_set_bug_assignee
    • First observedfr_set_bug_status
    • First observedfr_set_bug_visibility
    • First observedfr_set_request_status
    • First observedfr_toggle_bug_affected
    • First observedfr_vote_request
    • First observedget_api_catalog
    • First observedget_endpoint_examples
    • First observedhub_clear_call_custom_prompt
    • First observedhub_clear_event_custom_prompt
    • First observedhub_clear_series_custom_prompt
    • First observedhub_count_calls
    • First observedhub_count_search_calls
    • First observedhub_delete_call
    • First observedhub_get_audio_url
    • First observedhub_get_call
    • First observedhub_get_custom_prompt
    • First observedhub_get_default_workspace
    • First observedhub_get_media_url
    • First observedhub_get_preferred_integration
    • First observedhub_get_preview_url
    • First observedhub_get_recording_progress
    • First observedhub_get_workspace
    • First observedhub_lens_chat
    • First observedhub_list_calendar_events
    • First observedhub_list_calls
    • First observedhub_list_integrations
    • First observedhub_list_members
    • First observedhub_regenerate_summary
    • First observedhub_reprocess_recording
    • First observedhub_search_calls
    • First observedhub_send_call_to_airtable
    • First observedhub_send_call_to_clickup
    • First observedhub_send_call_to_jira
    • First observedhub_set_call_custom_prompt
    • First observedhub_set_custom_prompt
    • First observedhub_set_default_workspace
    • First observedhub_set_event_custom_prompt
    • First observedhub_set_preferred_integration
    • First observedhub_set_series_custom_prompt
    • First observedlist_accounts
    • First observedlist_boards
    • First observedlist_spaces
    • First observedlist_workspaces
    • First observedpm_add_comment_reaction
    • First observedpm_add_tasks_to_sprint
    • First observedpm_add_team_member
    • First observedpm_bulk_change_task_type
    • First observedpm_cancel_invitation
    • First observedpm_change_member_role
    • First observedpm_clone_view
    • First observedpm_complete_sprint
    • First observedpm_configure_task_sharing
    • First observedpm_confirm_import_mappings
    • First observedpm_count_unread_notifications
    • First observedpm_create_automation
    • First observedpm_create_custom_field
    • First observedpm_create_folder
    • First observedpm_create_list
    • First observedpm_create_space
    • First observedpm_create_sprint
    • First observedpm_create_sprint_group
    • First observedpm_create_tag
    • First observedpm_create_task
    • First observedpm_create_task_comment
    • First observedpm_create_task_relationship
    • First observedpm_create_team
    • First observedpm_create_view
    • First observedpm_create_webhook
    • First observedpm_delete_automation
    • First observedpm_delete_custom_field
    • First observedpm_delete_folder
    • First observedpm_delete_list
    • First observedpm_delete_saved_filter
    • First observedpm_delete_sprint
    • First observedpm_delete_tag
    • First observedpm_delete_task
    • First observedpm_delete_task_comment
    • First observedpm_delete_task_relationship
    • First observedpm_delete_team
    • First observedpm_delete_time_entry
    • First observedpm_delete_view
    • First observedpm_delete_webhook
    • First observedpm_describe_status_priority_level_endpoints
    • First observedpm_get_automation
    • First observedpm_get_automation_audit
    • First observedpm_get_current_user
    • First observedpm_get_dashboard
    • First observedpm_get_import_job
    • First observedpm_get_notification_settings
    • First observedpm_get_sprint
    • First observedpm_get_sprint_burndown
    • First observedpm_get_sprint_tasks
    • First observedpm_get_subtasks
    • First observedpm_get_tag
    • First observedpm_get_task
    • First observedpm_get_task_sharing
    • First observedpm_get_team
    • First observedpm_get_view
    • First observedpm_get_webhook
    • First observedpm_get_webhook_usage
    • First observedpm_get_workspace_context
    • First observedpm_get_workspace_user_avatar_url
    • First observedpm_leave_workspace
    • First observedpm_list_automations_for_folder
    • First observedpm_list_automations_for_list
    • First observedpm_list_automations_for_space
    • First observedpm_list_comment_reactions
    • First observedpm_list_import_jobs
    • First observedpm_list_invitations
    • First observedpm_list_notifications
    • First observedpm_list_reference_data
    • First observedpm_list_saved_filters
    • First observedpm_list_sprint_groups
    • First observedpm_list_task_comments
    • First observedpm_list_task_relationships
    • First observedpm_list_task_types
    • First observedpm_list_teams
    • First observedpm_list_time_entries
    • First observedpm_list_views
    • First observedpm_list_webhook_deliveries
    • First observedpm_list_webhooks
    • First observedpm_list_workspace_members
    • First observedpm_log_time
    • First observedpm_mark_all_notifications_read
    • First observedpm_mark_notification_read
    • First observedpm_read_activity_log
    • First observedpm_remove_comment_reaction
    • First observedpm_remove_tasks_from_sprint
    • First observedpm_remove_team_member
    • First observedpm_remove_workspace_member
    • First observedpm_replay_webhook_delivery
    • First observedpm_save_filter
    • First observedpm_search_tasks
    • First observedpm_send_invitation
    • First observedpm_start_sprint
    • First observedpm_test_webhook
    • First observedpm_transfer_workspace_ownership
    • First observedpm_update_automation
    • First observedpm_update_current_user
    • First observedpm_update_custom_field
    • First observedpm_update_folder
    • First observedpm_update_list
    • First observedpm_update_notification_channel
    • First observedpm_update_sprint
    • First observedpm_update_tag
    • First observedpm_update_task
    • First observedpm_update_task_comment
    • First observedpm_update_team
    • First observedpm_update_view
    • First observedpm_update_webhook
    • First observedwhoami
    • First observedwiki_check_public_slug
    • First observedwiki_confirm_attachment
    • First observedwiki_create_page
    • First observedwiki_create_space
    • First observedwiki_delete_attachment
    • First observedwiki_delete_page
    • First observedwiki_delete_space
    • First observedwiki_disable_page_share
    • First observedwiki_enable_page_share
    • First observedwiki_get_page
    • First observedwiki_get_page_share
    • First observedwiki_get_public_settings
    • First observedwiki_get_space
    • First observedwiki_get_space_with_pages
    • First observedwiki_list_attachments
    • First observedwiki_list_pages
    • First observedwiki_list_spaces
    • First observedwiki_move_page
    • First observedwiki_request_attachment_upload
    • First observedwiki_retrieve
    • First observedwiki_search
    • First observedwiki_set_public_settings
    • First observedwiki_update_page
    • First observedwiki_update_space

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Perplexity for social: ask what competitors are running across social and get answers grounded in real ad and creative data, not guesses.
    2
    Apache 2.0
  • A
    license
    A
    quality
    C
    maintenance
    Enables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.
    16
    4 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Browse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources