Skip to main content
Glama

Server Details

AI-native project and portfolio management platform for PMOs. OAuth + PAT.

Ownership verified
Status
Healthy
Uptime
10.4% over 70 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
Onplana/onplana-mcp-server
GitHub Stars
4
Server Listing
Onplana MCP server

TDQS

B3.4/5.0

Scored across 306 tools

Disambiguation2/5

The 306-tool surface contains several near-duplicate or overlapping clusters: gantt_optimize vs auto_schedule_proposal, compose_status_digest vs generate_status_report vs summarize_project, compute_risk_patterns vs list_org_risk_patterns, and create_timesheet_entry vs submit_timesheet. Detailed descriptions mitigate some confusion, but the sheer number of adjacent tools and true duplicates makes misselection likely.

Naming Consistency3/5

Almost all tool names use snake_case, which is consistent, but verb conventions vary widely: list_/get_/create_/update_ dominate, while fetch, search, whoami, next_task, find_meeting_times, lookup_help_topic, and gantt_optimize break the pattern. Similar report-generation actions also use different verbs (compose_, generate_, summarize_, draft_), reducing predictability.

Tool Count1/5

306 tools is far beyond any reasonable scoped surface for a single MCP server and creates an extreme cognitive-load and selection-budget problem. Even though the domain is broad, this count is an order of magnitude past the typical well-scoped 3-15 range.

Completeness5/5

The surface covers the full enterprise project-management lifecycle: projects, tasks, dependencies, risks, issues, governance proposals, portfolios, time tracking, documents, pages, workflows, webhooks, whiteboards, audit logs, AI reports, and administrative operations. CRUD and lifecycle operations are present for nearly every entity, with no obvious dead ends.

Available Tools

306 tools
add_ccb_memberA
Idempotent
Inspect

Add a user to the org-level Change Control Board. Requires org.governance.manage (Admin+ by default). Idempotent. User must be an active org member. Feature: changeControl (ENTERPRISE+).

NameRequiredDescriptionDefault
userIdYesID of the org member to add to the CCB.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare idempotent/readOnly=false/destructive=false, so the description earns credit for added context instead: the required permission scope, the active-org-member precondition, and the ENTERPRISE+ feature gate. The 'Idempotent' line slightly restates idempotentHint but the auth and eligibility constraints are genuine 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?

Five short telegraphic sentences, front-loaded with the action and scope, then permission, idempotency, eligibility, and tier. 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 one-parameter mutation with no output schema, it covers permission, feature tier, and eligibility adequately. It doesn't state what happens on success/failure (e.g. already-a-member response) or the return payload, 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 100% with a single well-documented userId, so the baseline is 3. The description adds one eligibility constraint on that parameter's value ('must be an active org member') but no format or sourcing detail beyond what the schema states.

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

Purpose5/5

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

Specific verb+resource+scope: 'Add a user to the org-level Change Control Board.' The 'org-level' qualifier cleanly distinguishes it from sibling add_project_member, so an agent can pick it 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 concrete preconditions for use: requires org.governance.manage (Admin+), the target must be an active org member, and the changeControl feature at ENTERPRISE+. It never names an alternative tool (e.g. list_ccb_members, update_member_role), 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.

add_project_memberA
Idempotent
Inspect

Add an EXISTING active org member to a project. Pass userId (look up with list_org_members first) and role (MANAGER/MEMBER/CONTRIBUTOR/VIEWER). Caller must have project.members.manage on the project. For inviting a brand-new email outside the org, use the invitation UI - this tool intentionally does not send emails.

NameRequiredDescriptionDefault
roleYes
userIdYesTarget user id (use list_org_members to look up).
projectIdYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false), so the bar is lower; the description still adds the required permission, the deliberate absence of email sending, and the active-org-member precondition. It does not state the failure behavior when a userId is not an org member, 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 sentences, front-loaded with the core constraint, then parameters, then permissions, then the negative routing case. 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 3-param mutation with no output schema and annotations already declaring idempotency and non-destructiveness, this covers preconditions, permissions, and the alternative path well. Only the error/edge behavior (non-member id, duplicate add) 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 only 33% (userId documented, projectId not), so the description must compensate. It does add the userId lookup source and enumerates role values, but the enum is already in the schema and it adds no meaning for projectId, so 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?

States a specific verb and resource ('Add ... to a project') and constrains scope precisely: an EXISTING active org member, not a new invitee. This immediately distinguishes it from email-invitation flows among its many siblings.

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

Usage Guidelines5/5

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

Gives explicit when-to-use (existing org member), an explicit when-not and alternative (brand-new email outside the org → use the invitation UI), a prerequisite permission (project.members.manage), and the lookup step (list_org_members first). Nothing is left to inference.

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

add_project_to_portfolioAInspect

Add a project to a portfolio (BUSINESS+ feature). Requires org.portfolio.manage (default Manager+). Idempotent-safe: if the project is already in the portfolio, returns an error so the caller can detect duplicates.

NameRequiredDescriptionDefault
projectIdYesId of the project to add.
portfolioIdYesId of the portfolio.

TDQS

A3.7/5.0
Behavior4/5

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

Beyond the annotations (readOnlyHint=false, destructiveHint=false, openWorldHint=false), it adds real behavioral context: the required permission scope and, importantly, that a duplicate add returns an error so callers can detect duplicates. This is consistent with idempotentHint=false. It omits reversibility (whether/how membership can be removed) and invalid-id 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 compact clauses: action, permission gate, duplicate behavior. No filler, and the purpose is front-loaded. The "(BUSINESS+ feature)" and permission abbreviations add density but earn their place as gating 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 2-param mutation with no output schema, the description covers purpose, authorization, and the notable duplicate-error behavior, which is enough to call it correctly. It could still say what the successful response contains and how to undo the membership.

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 portfolioId and projectId are already documented as ids in the schema. The description adds no parameter-level detail (formats, cross-references, constraints), so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb+resource pair ("Add a project to a portfolio"), which is unambiguous and distinct from sibling add_project_member, create_portfolio, and update_portfolio. It does not explicitly name or contrast with any alternative tool, so it stops short of the top score despite the clear operation.

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 a gating prerequisite (requires org.portfolio.manage, default Manager+, BUSINESS+ feature) but no when-to-use/when-not guidance or named alternative for adding membership. Usage is implied by the operation name rather than stated, making this minimum viable.

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

add_subtasksAInspect

Atomically create one or more subtasks under an existing parent task. All children inherit the parent's project. Returns the created ids. Up to 25 subtasks per call. Use this instead of calling create_task repeatedly when decomposing a claimed task — single transaction, single tool-call budget slot, atomic rollback on any failure.

NameRequiredDescriptionDefault
parentIdYesThe parent task id. Must be a task the caller can see.
subtasksYes1–25 subtasks to create. Each item mirrors the create_task shape.
idempotencyKeyNoOptional idempotency key. Pass a stable unique value (e.g. a UUID) to make this create safe to retry: calling again with the same key within 24h - even from a new session after a reconnect - replays the original result and creates no duplicate. Org-scoped; works across conversations.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already establish this is a non-read-only, non-destructive write; the description adds genuinely new behavior: atomic all-or-nothing rollback, project inheritance from the parent, the returned ids, and the 25-item cap. It could optionally reconcile why the tool is retry-safe via idempotencyKey while idempotentHint is false, but the disclosure is well above the annotation baseline.

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

Conciseness5/5

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

Four short sentences, front-loaded with what it does, then side effects, then the routing advice. Every sentence adds new 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 only 3 parameters, no nested output schema, and full schema coverage, the description covers everything an agent needs: parentage, inheritance, limits, return value, and transaction semantics.

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 one rule not in the schema (children inherit the parent's project) and restates the 25-item cap, which slightly deepens understanding of the array 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?

Specific verb (create) plus resource (subtasks) plus the constraint that they hang under an existing parent task with inherited project. This cleanly separates it from create_task and bulk_create_tasks, both of which appear 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?

Explicitly routes the agent: 'Use this instead of calling create_task repeatedly when decomposing a claimed task,' and gives the reason (single transaction, single budget slot). It names create_task as the alternative but never addresses bulk_create_tasks, the other obvious sibling for multi-task creation, so the when-not coverage is incomplete.

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

add_timesheet_approverA
Idempotent
Inspect

Add a user to the designated timesheet approver list. Requires OWNER or ADMIN. Idempotent. User must be an active org member. Feature: timeTracking (PRO+).

NameRequiredDescriptionDefault
userIdYesOrg member ID to designate as approver.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare non-readonly, non-destructive, idempotent, and closed-world behavior; the description still adds real value with the OWNER/ADMIN authorization requirement, active-member eligibility rule, and PRO+ feature gate. It redundantly restates idempotency, which the annotation already conveys, keeping it out of 5 territory.

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

Conciseness5/5

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

Four short sentences with the core action front-loaded and constraints trailing; no filler, no restated title, and every sentence carries a distinct rule.

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

Completeness5/5

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

For a one-parameter mutation with no output schema and rich annotations, the description supplies purpose, permissions, idempotency, eligibility, and feature gating. 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.

Parameters4/5

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

Schema coverage is 100%, so the single userId parameter is already documented as the 'Org member ID to designate as approver.' The description adds the constraint that the referenced user must be an active org member, which is a genuine eligibility rule beyond the schema text.

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

Purpose5/5

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

States a specific verb and resource ('Add a user to the designated timesheet approver list'), which unambiguously distinguishes it from list_timesheet_approvers and the approve/reject_timesheet_* siblings. An agent can identify the operation 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 preconditions — requires OWNER or ADMIN, target must be an active org member, and the timeTracking (PRO+) feature must be enabled — so the agent knows when the call will succeed. However, it names no alternative tool (e.g., list_timesheet_approvers or update_member_role) and states no explicit when-not condition, so it stops short of a 5.

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

advance_proposal_stageA
DestructiveIdempotent
Inspect

Drive a governance proposal through its lifecycle. Actions: submit (DRAFT->PROPOSAL_REVIEW, owner+; restricted), start_review (SUBMITTED->PROPOSAL_REVIEW for older proposals, reviewer+), hold (any pre-terminal->ON_HOLD), unhold (ON_HOLD->previousStage), reject (any pre-terminal->REJECTED; gate-panel restricted at review stages), archive (terminal->ARCHIVED). Advancing into a review stage seeds the gate-reviewer panel (parity with REST); only the PROPOSAL_STAGE_CHANGED workflow-run dispatch is skipped on the agent path. Plan gate: governance.

NameRequiredDescriptionDefault
actionYes
proposalIdYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so safety is covered. The description adds genuine beyond-schema context: advancing into a review stage seeds the gate-reviewer panel, the PROPOSAL_STAGE_CHANGED workflow-run dispatch is skipped on the agent path, and the 'governance' plan gate is required. It stops short of stating reversibility of destructive actions like reject/archive.

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

Conciseness4/5

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

Front-loaded with the tool's purpose and then a compact action list where every clause carries transition or permission information. Slightly dense with parentheticals, but 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?

With 2 params, no output schema, and annotations covering safety, the description covers transitions, permissions, and side effects thoroughly. It could note the return shape or what happens to a proposal's data on reject/archive, but nothing essential 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 0%, and the enum values alone ('submit', 'hold', etc.) are opaque without semantics. The description compensates well by mapping each action value to its source/target stage and its prerequisite role, which is the essential meaning an agent needs to pick the right action.

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 ("Drive a governance proposal through its lifecycle") and then enumerates the six actions with their exact state transitions. This clearly separates it from siblings like update_proposal, create_proposal, and get_proposal, which an agent could otherwise confuse with it.

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

Usage Guidelines4/5

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

Each action is annotated with the transition it performs and the required access level (e.g., submit is 'owner+; restricted', reject is 'gate-panel restricted at review stages'). That gives strong when-to-use guidance per action, though it never names a sibling alternative or explicitly excludes cases where a different tool is preferable.

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

agent_bootstrapA
Read-onlyIdempotent
Inspect

Cold-start summary for a fresh session, in one round-trip. Returns identity + org + plan features (as whoami does), a capabilities summary (how many tools exist, are reachable, and are callable), the entity schema index, and the assigned-task count, collapsing whoami, describe_capabilities and describe_schema into a single call. Finer detail lives in those tools individually: describe_capabilities for full per-tool gates, describe_schema(entity[, projectId]) for field shapes (projectId yields a project's merged custom fields), list_assigned_tasks for the full queue. Also returns workspace: the URL of the user's Onplana workspace, plus a list of what only the web app can do (Gantt, boards, dashboards, exports, inviting teammates, file and MS Project import). That field exists because many users arrive from inside another app and have never opened Onplana, so the workspace URL is often the only pointer they have to it.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context beyond that: it is a single round-trip aggregation, and it explains the provenance and purpose of the `workspace` field (users arriving from another app). It does not discuss freshness/staleness of the snapshot or auth prerequisites, 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.

Conciseness4/5

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

Front-loaded with the core purpose and well organized, but somewhat long. The 'collapsing whoami, describe_capabilities and describe_schema into a single call' clause is effectively repeated from the preceding sentence, and the closing workspace/why-it-exists sentence, while justified, could be tightened.

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 input schema and no output schema, the description carries the full burden of explaining return values, and it does so thoroughly — identity/org/plan, capabilities counts, schema index, task count, workspace URL, and web-only feature list. 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.

Parameters4/5

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

The tool takes zero parameters, so per the rubric the baseline is 4. The description mentions 'describe_schema(entity[, projectId])' but that documents a sibling's signature, not this tool's own inputs, so there is nothing further to clarify.

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

Purpose5/5

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

States a precise verb+resource ('cold-start summary for a fresh session, in one round-trip') and enumerates exactly what it returns (identity, org, plan features, capabilities summary, entity schema index, assigned-task count). It explicitly distinguishes itself from siblings by naming the three tools it collapses (whoami, describe_capabilities, describe_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 frames the use case ('fresh session', 'one round-trip') and routes the agent to alternatives for deeper needs: describe_capabilities for per-tool gates, describe_schema for field shapes, list_assigned_tasks for the full queue. Both when-to-use and when-to-use-something-else are covered.

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

analyze_project_risksA
Destructive
Inspect

Run AI risk analysis on one project and merge the findings into its risk register (visible via list_risks). A finding that matches an open AI risk nobody has touched updates it; one matching a risk a person or agent added or edited, or a dismissed risk, is skipped; the rest are added. Nothing is removed. Use this when the user asks "what could go wrong on Project X" or before a sprint planning meeting. Caller needs write access to the project, as for create_risk.

NameRequiredDescriptionDefault
projectIdYes

TDQS

A4.4/5.0
Behavior5/5

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

Goes well beyond the annotations by spelling out the merge algorithm: untouched open AI risks are updated, human/agent-edited or dismissed risks are skipped, the remainder are added, and nothing is removed. It also states the authorization requirement ('write access to the project, as for create_risk'), which annotations cannot convey.

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

Conciseness5/5

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

Three tight sentences, front-loaded with the action and effect, then the merge rules, then the usage triggers. No filler and every sentence carries decision-relevant information.

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

Completeness4/5

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

With no output schema, the description could say what the call returns (counts of added/updated/skipped findings) and whether repeat runs behave the same given idempotentHint=false. Otherwise the mutation semantics, permissions, and triggers are complete 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?

There is one parameter (projectId) with 0% schema description coverage, and the description never says whether it takes an ID, key, or name or where to obtain it. Referencing 'Project X' implies a single project scope but adds no format or lookup guidance, so a gap remains.

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 ('Run AI risk analysis on one project') and immediately names the effect ('merge the findings into its risk register'), distinguishing it from create_risk and list_risks by describing merge semantics rather than single-entry creation or listing.

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 triggers ('what could go wrong on Project X', before sprint planning) and points at list_risks for viewing and create_risk for the permission model. It stops short of an explicit exclusion (e.g. 'do not use for manually adding a single risk — use create_risk'), so it is strong context rather than 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.

append_logAInspect

Append a streaming progress log line to the current agent conversation. Required: conversationId (the AiConversation this agent session belongs to), lineNum (monotonic integer the agent maintains), level (INFO/WARN/ERROR/DEBUG or any string <=8 chars), text (the log line up to 4000 chars). Optional taskId attaches the line to a specific task and triggers a real-time UI broadcast so humans see it land. No undo — log lines are append-only.

NameRequiredDescriptionDefault
textYesLog line content, up to 4000 chars.
levelYesINFO / WARN / ERROR / DEBUG (or any string up to 8 chars).
taskIdNoOptional task this line is about.
lineNumYesMonotonic integer per conversation.
conversationIdYesAiConversation id (the agent session).
idempotencyKeyNoOptional idempotency key. Pass a stable unique value (e.g. a UUID) to make this create safe to retry: calling again with the same key within 24h - even from a new session after a reconnect - replays the original result and creates no duplicate. Org-scoped; works across conversations.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false, idempotentHint=false, destructiveHint=false. The description adds genuinely new behavioral facts: append-only with no undo, and that supplying taskId triggers a real-time UI broadcast so humans see the line land. It does not mention the schema's idempotencyKey retry behavior, which is the one remaining gap.

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

Conciseness4/5

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

Dense and front-loaded: purpose first, then required params, then the optional broadcast behavior, then the append-only caveat. Sentences are long but each carries information; 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?

With no output schema and six parameters, the description covers the four required fields, the mutating append-only nature, and the taskId broadcast side effect. Only the optional idempotencyKey is left entirely to the schema, which documents it fully, so this is nearly 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 meaning beyond the schema for taskId: it explains the side effect (real-time UI broadcast) rather than just 'task this line is about.' The rest of the parameter commentary largely restates schema constraints (level <=8 chars, text <=4000 chars, monotonic lineNum).

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 precise verb+resource+scope: 'Append a streaming progress log line to the current agent conversation.' No sibling tool does log streaming, so an agent can identify this immediately without opening the schema.

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

Usage Guidelines3/5

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

Usage is implied by the framing ('streaming progress log line to the current agent conversation') and it enumerates required fields, but it never states when to choose this over siblings like create_comment or create_issue, nor any when-not condition. Adequate but leaves routing to inference.

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

approve_timesheet_entryA
DestructiveIdempotent
Inspect

Approve a single SUBMITTED timesheet entry. Caller must be an eligible approver (OWNER/ADMIN/MANAGER in managers mode, or a designated approver in approvers mode). Feature: timeTracking (PRO+).

NameRequiredDescriptionDefault
entryIdYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare the safety profile (readOnly=false, idempotent=true, destructive=true, openWorld=false). The description adds valuable context beyond them: the authorization requirement (eligible approver roles/designation), a feature gate (timeTracking PRO+), and a state precondition (entry must be SUBMITTED). It stops short of explaining what happens on success or whether approval is reversible, but that is a meaningful supplement.

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 eligibility and feature gating. No filler; every sentence 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?

For a low-complexity single-parameter mutation with no output schema, the description covers the action, authorization, gating, and precondition well. The remaining gap is outcome/error behavior (e.g., what if the entry is not submitted), which annotations alone do not resolve.

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 0% for the single entryId parameter, so the schema itself adds no meaning. The description implies entryId refers to a submitted timesheet entry, giving marginal semantic context, but does not describe the ID's format or source, leaving the burden mostly unmet.

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 ('Approve a single SUBMITTED timesheet entry') with the entry state constraint front-loaded. It implicitly contrasts with the sibling approve_timesheet_week via 'single ... entry', but never names the alternative explicitly, so sibling differentiation is inferential rather than stated.

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

Usage Guidelines3/5

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

Provides the caller eligibility conditions (OWNER/ADMIN/MANAGER in managers mode, or a designated approver in approvers mode), which is solid context. However, it gives no explicit when-to-use vs approve_timesheet_week or reject_timesheet_entry, and no when-not guidance, so usage 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.

approve_timesheet_weekA
DestructiveIdempotent
Inspect

Bulk-approve all SUBMITTED timesheet entries for a specific user in a given week. Caller must be an eligible approver. Feature: timeTracking (PRO+).

NameRequiredDescriptionDefault
userIdYesUser whose timesheet to approve.
weekStartYesMonday date (YYYY-MM-DD).

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare the write/destructive/idempotent profile, so the bar is lower. The description adds real value beyond them: it limits effects to SUBMITTED entries, requires approver eligibility, and flags the PRO+ feature gate. It stops short of explaining what happens to non-submitted entries or whether approval is 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 short, front-loaded sentences carry the scope, the eligibility requirement, and the feature gate 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 no output schema, the annotations plus description cover scope, precondition, and gating. It does not state the result of the call (e.g., what the bulk approval returns or whether partially-submitted weeks error), which is the only meaningful 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 (userId, weekStart) are already documented in the schema. The description adds no format or constraint detail beyond what the schema provides, making the baseline 3 appropriate.

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

Purpose5/5

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

States a specific verb (bulk-approve), resource (timesheet entries), and scope (all SUBMITTED entries for a specific user in a given week). The 'bulk/week' framing cleanly distinguishes it from the singular approve_timesheet_entry 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?

Provides a clear precondition ('Caller must be an eligible approver') and scopes the operation to SUBMITTED entries only. It does not explicitly name alternatives (e.g., approve_timesheet_entry, reject_timesheet_week), so usage context is clear but without exclusions.

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

archive_projectA
Destructive
Inspect

Archive a completed or cancelled project: it becomes read-only (every write to it or anything inside it is refused with PROJECT_ARCHIVED) and is hidden from project lists unless they ask for archived projects. Nothing is deleted, and unarchive_project reverses it. The organization's archive readiness criteria are checked under its enforcement mode: in BLOCK a required gap refuses with READINESS_GAPS, in WARN the archive goes through and the verdict is returned. Needs the project Owner or Manager role, or org.compliance.manage.

NameRequiredDescriptionDefault
projectIdYes

TDQS

A4.4/5.0
Behavior5/5

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

Goes well beyond the annotations by disclosing that the project becomes read-only, that writes fail with PROJECT_ARCHIVED, that it is hidden from lists unless archived items are requested, that nothing is deleted, that unarchive reverses it, and that readiness checks return READINESS_GAPS under BLOCK mode. Also states the required roles and permission (Owner/Manager or org.compliance.manage).

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 primary effect (read-only, hidden) before the exceptions and roles. Dense but virtually every clause carries operational information; only the dense packing of readiness-mode and role details slightly hurts scannability.

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

Completeness5/5

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

With no output schema, the description still covers return behavior (verdict returned in WARN mode), error codes (PROJECT_ARCHIVED, READINESS_GAPS), reversibility, and authorization requirements, which is everything needed to invoke it correctly.

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

Parameters3/5

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

Schema coverage is 0% and the single required projectId parameter is not described in the description or schema. The parameter is self-evident from its name, so the gap is minor, but the description adds no 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?

States a specific verb (archive), resource (project), and precondition (completed or cancelled project), and names the reversing sibling unarchive_project. An agent can immediately distinguish it from delete_project and create_project.

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 condition that makes archival appropriate (project is completed/cancelled), names unarchive_project as the reversal, and explains the readiness-gate behavior under BLOCK/WARN. It does not explicitly say when to prefer delete_project instead, but the 'nothing is deleted' framing covers the main confusion.

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

assign_tagA
Idempotent
Inspect

Assign a tag to a task or project. Provide either taskId or projectId, not both. The caller must have access to the target entity. Assigning a tag that is already on the target succeeds as a no-op (alreadyAssigned: true in the result).

NameRequiredDescriptionDefault
tagIdYesId of the tag to assign.
taskIdNoAssign to this task. Mutually exclusive with projectId.
projectIdNoAssign to this project. Mutually exclusive with taskId.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false and idempotentHint=true, so the safety profile is covered. The description goes beyond them by specifying the idempotent behavior concretely — a duplicate assignment succeeds as a no-op and returns alreadyAssigned: true — and by stating the access requirement. No error/rate-limit detail, but solid added context 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, then the exclusivity rule, then the permission and no-op semantics. 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.

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 usefully discloses the alreadyAssigned result field. All three parameters are accounted for, the mutual-exclusion rule and access requirement are stated, and 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 the mutual-exclusivity of taskId/projectId is already written into the schema property descriptions, so the description mostly restates it. It does reinforce the constraint in prose, but adds no syntax, format, or default information 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 (assign) and resource (tag) plus the two target entity types, so the operation is unambiguous. It does not name the inverse sibling unassign_tag or distinguish itself from create_tag, but the core purpose is fully clear.

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

Usage Guidelines4/5

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

Explicit constraints: provide either taskId or projectId but not both, and the caller must have access to the target entity. There is no routing advice to alternatives (e.g., unassign_tag), but the preconditions for correct invocation are stated.

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

assign_taskA
DestructiveIdempotent
Inspect

Assign or unassign one task. Pass assigneeId=null to unassign. Alternatively pass assigneeEmail to resolve by org-member email (useful when the agent only knows the user's email and would otherwise need a separate list to find their id). Mutually exclusive with assigneeId. Optional expectedAssigneeRevision (integer): if supplied, the call fails with a CONFLICT error when another caller has assigned the task since you last read it. Returns the assignee's id and name (assigneeName), and the new claimRevision so you can chain consecutive assigns under optimistic concurrency. Caller must have task.assign on the project. Target must be an active member of the organization. On plans with resource management the result also carries load: the assignee's capacity for the week the task lands in, the hours already committed to their other open work, this task's share, whether that projection exceeds capacity (over, overBy), and the competing work that week (otherWork). Null when the task has no dates.

NameRequiredDescriptionDefault
dryRunNoPreview only: return assignee current -> proposed + currentAssigneeRevision without committing. Writes nothing, fires no side effects. Pair with expectedAssigneeRevision on the real call.
taskIdYesTask to (un)assign.
assigneeIdNoUser id or null to unassign. Mutually exclusive with assigneeEmail.
assigneeEmailNoAlternative to assigneeId. Resolved against active org members by email. 404 if not a member.
expectedAssigneeRevisionNoOptimistic-concurrency guard. The Task.claimRevision you read; CONFLICT if it has moved.

TDQS

A4.6/5.0
Behavior5/5

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

Adds substantial context beyond the annotations: required permission (task.assign on the project), target precondition (active org member), the CONFLICT failure mode for expectedAssigneeRevision, and the returned claimRevision that enables chained optimistic-concurrency assigns. With destructiveHint=true already declared, this level of precondition and error disclosure is more than the annotations carry on their own.

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

Conciseness4/5

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

Front-loads the core action and the unassign idiom, then layers concurrency and capacity detail in a logical order. It is a single dense paragraph running well over a hundred words, and the `load` payload sentence could be tightened, but 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.

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 documenting the return shape (assignee id and name, claimRevision, and the capacity/load block including over, overBy and otherWork). It also covers permissions, target preconditions, error semantics and dryRun pairing, leaving no material gap for a five-parameter 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 description coverage is 100%, so the schema already documents all five parameters and the baseline would be 3. The description nonetheless adds operational meaning the schema states only tersely: why email resolution exists, how expectedAssigneeRevision fails and how claimRevision is meant to be reused for chaining.

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 ('Assign or unassign one task') and immediately delimits scope to a single task, which distinguishes it from the sibling bulk_assign. The unassign path is described in the same breath, so the agent knows this tool covers both directions.

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 when to reach for assigneeEmail versus assigneeId, including the rationale ('when the agent only knows the user's email and would otherwise need a separate list'), and states the two are mutually exclusive. It does not, however, name tool-level alternatives such as bulk_assign or propose_assignment, so routing between sibling tools 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.

attach_file_from_urlAInspect

Attach a file to a task by URL. The SERVER downloads the file (public http(s) URL only; internal/private addresses are blocked) and stores it as a real attachment, so the bytes never pass through the model (no truncation risk). Use this when the file already lives at a URL (cloud storage, a public link). Max 50 MB. fileName is optional (derived from the URL otherwise). For a file that exists only in your sandbox, use upload_task_attachment instead. Any project contributor or above can attach (VIEWERs cannot).

NameRequiredDescriptionDefault
urlYesPublic http(s) URL of the file to fetch. 1..2048 chars.
taskIdYesThe task to attach to.
fileNameNoOptional file name incl. extension. Derived from the URL when omitted.
idempotencyKeyNoOptional idempotency key. Pass a stable unique value (e.g. a UUID) to make this create safe to retry: calling again with the same key within 24h - even from a new session after a reconnect - replays the original result and creates no duplicate. Org-scoped; works across conversations.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only cover the coarse profile (openWorldHint=true, destructiveHint=false), so the description carries real additional value: server-side fetch semantics with SSRF protection (internal/private addresses blocked), a 50 MB cap, no-truncation guarantee, and an authorization tier requirement. These are exactly the failure modes an agent needs to know before calling.

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

Conciseness5/5

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

Six compact sentences, each carrying a distinct fact (mechanism, routing rule, size limit, optional param, alternative tool, permission). The purpose and mechanism are front-loaded before the constraints.

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 4-parameter create tool with no output schema, the description covers the mechanism, preconditions, limits and the competing sibling. Since there is no output schema, it does not need to describe return values, and the idempotency/replay behavior is fully documented 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 coverage is 100%, so url, taskId, fileName and idempotencyKey are already documented at the schema level. The description restates only the fileName derivation rule and the public-URL constraint, both of which the schema already states, so it adds no meaningful syntax or format detail beyond 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 ('Attach a file to a task by URL') and immediately explains the mechanism — the server fetches the bytes rather than the model. It contrasts itself with the sibling 'upload_task_attachment' so an agent can route correctly without opening any schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use ('when the file already lives at a URL — cloud storage, a public link'), an explicit alternative for the other case ('file that exists only in your sandbox, use upload_task_attachment instead'), and a permission precondition (contributor or above; VIEWERs cannot). Nothing is left to inference.

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

attach_sharepoint_documentAInspect

Attach a SharePoint document to an Onplana project workspace as a LINK reference (externalProvider=SHAREPOINT). The file stays in SharePoint; Onplana stores only the URL + metadata. No file is downloaded or copied in V1 (security stance). Caller must have read access to the SharePoint site.

NameRequiredDescriptionDefault
siteIdYes
libraryIdNo
projectIdYes
driveItemIdYes

TDQS

A4.1/5.0
Behavior5/5

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

Annotations only supply the generic flag set; the description adds real substance: what Onplana persists (URL + metadata only), what is explicitly not done (no download/copy in V1, framed as a security stance), and the auth requirement. This is well beyond annotation coverage.

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

Conciseness4/5

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

Front-loaded with the operation and the LINK semantics, then the no-copy constraint and auth note. Four tight sentences with little waste, though the parenthetical '(security stance)' and repeated 'no download/copy' framing is mildly 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?

Behavior, storage model, and prerequisites are complete for a mutation tool, and there is no output schema to explain. The remaining gap is purely parameter-level: four undocumented identifiers with no schema descriptions.

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% and the description documents none of the four identifiers. It hints that siteId refers to a SharePoint site, but libraryId, driveItemId, and projectId are left entirely for the agent to infer, and no format or ID-source guidance is given.

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 (attach), resource (SharePoint document), and destination (Onplana project workspace), and pins the exact mechanism (LINK reference, externalProvider=SHAREPOINT). This cleanly separates it from upload-style siblings and from generic attach_link.

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

Usage Guidelines4/5

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

Gives a clear prerequisite ('caller must have read access to the SharePoint site') and the V1 security stance that no file is copied, which constrains when this is the right choice. It stops short of explicitly naming alternatives like attach_link or upload_library_document and the condition that selects them.

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

audit_filter_metadataA
Read-onlyIdempotent
Inspect

Distinct action + resource + clientSurface values the caller's org has logged, with row counts per value. Useful for building filter chips before a follow-up list_audit_log call. clientSurfaces reports which clients the org has actually seen (WEB, MAKER, EXTENSION, DESKTOP, MOBILE, MCP, PAT, SYSTEM, UNKNOWN), with rows that record no client grouped under the value 'NONE'. Capped at 100 values per dimension. OWNER or ADMIN + auditLogs feature.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior5/5

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

With readOnlyHint/idempotentHint already covering the safety profile, the description still adds substantive behavior: a 100-value-per-dimension cap, the full clientSurface enum with the non-obvious 'NONE' bucket for rows recording no client, and the required permission gate (OWNER or ADMIN + auditLogs feature). That is auth, result-shaping, and edge-case behavior well beyond the annotations.

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

Conciseness4/5

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

Front-loads what is returned, then purpose, then the enum/cap/permission details; every sentence carries information. The parenthetical enum list is long but directly serves the stated 'build filter chips' use case, so it earns its 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?

With zero params and no output schema, the description correctly carries the burden by describing the returned shape (distinct values plus per-value row counts) and its limits. It covers enough to call the tool correctly, though it does not say whether all results come back in one call or how counts are scoped.

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

Parameters4/5

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

The tool takes no parameters, so the baseline is 4; the description's discussion of dimensions is about output rather than input semantics. Nothing is missing on the input side.

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

Purpose5/5

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

States a precise verb+resource: returns the distinct action, resource, and clientSurface values logged by the caller's org, with row counts per value. Names the enum domain and the sibling relationship to `list_audit_log`, so an agent can distinguish it from list/export/get audit tools without opening a schema.

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

Usage Guidelines4/5

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

Explicitly frames the use case — building filter chips before a follow-up `list_audit_log` call — which is clear, actionable context. It stops short of stating exclusions (e.g., when the enums are already known, or how it relates to `export_audit_log`/`get_audit_entry`), so it falls just below 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.

auto_detect_import_risksA
Idempotent
Inspect

Run deterministic schedule-risk detection on a project and persist any findings to the Risks tab. Detects: project-end overruns, overdue tasks, unassigned-task ratio above 30%, and stuck-at-99% tasks. Idempotent via dedupe — re-running does not pile up duplicates. Returns the count of NEW risks inserted (0 when all detected risks already exist). No LLM call, no plan gate. Use after import or when the Risks tab is empty and the user asks "are there any obvious problems with this project?"

NameRequiredDescriptionDefault
projectIdYesID of the project to scan for schedule risks.

TDQS

A4.5/5.0
Behavior5/5

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

Adds substantial behavior beyond the annotations: it writes/persists findings, is idempotent through dedupe, returns the count of NEW risks inserted (0 when all already exist), and performs no LLM call or plan gate. The return-count disclosure is especially valuable given there is no output schema.

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

Conciseness5/5

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

Front-loaded with the action and destination, then a compact detection list, then idempotency/return behavior, then usage triggers. Every sentence carries distinct information with no 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?

With no output schema, the description compensates by explaining what is returned (count of new risks). Combined with the detection rules, idempotency, and usage conditions, an agent has everything needed to invoke and interpret the 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?

Single parameter with 100% schema description coverage, so the schema already documents projectId fully. The description implies the scan target is a project but adds no format or syntax detail beyond the schema field. 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 ('Run deterministic schedule-risk detection on a project') and enumerates the exact detection rules (overruns, overdue tasks, >30% unassigned, stuck-at-99%). It also names where results go ('persist ... to the Risks tab'), so it is distinguishable from siblings like get_schedule_risk and analyze_project_risks.

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 triggering contexts ('Use after import or when the Risks tab is empty and the user asks ...') and rules out LLM-based/plan-gated alternatives via 'No LLM call, no plan gate'. It stops short of naming the specific sibling tools it is an alternative to (e.g., analyze_project_risks, compute_risk_patterns).

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

auto_schedule_proposalA
Destructive
Inspect

PRO+ AI scheduling tool for agents. Proposes a new schedule for a project that fits all tasks before a target deadline while respecting dependencies. Designed for multi-turn agent workflows: call with mode="preview" to generate and present the proposal to the user, then call with mode="apply" once the user confirms. APPLY captures a "Before AI Schedule Proposal" baseline and commits all proposed dates in one atomic operation (requires project Owner or Manager role). Optionally levels resources to avoid overallocation. Cap: 100 tasks. Feature: aiAdvanced (PRO+).

NameRequiredDescriptionDefault
modeNopreview (default): return proposals without writing. apply: capture a baseline then commit all proposed dates. Requires project Owner or Manager role.preview
deadlineYesTarget end date in YYYY-MM-DD format. All tasks will be proposed to finish on or before this date.
previewIdNoThe previewId a preview of this project returned. When a preview returns one, apply mode writes exactly that stored preview instead of proposing again, and refuses without it or when the plan changed since.
projectIdYesID of the project to schedule.
levelResourcesNoWhen true (default: false), the AI avoids overallocating any user beyond their ResourceCapacity.hoursAvail for the week.
allowOverallocationNoWhen true, overallocation warnings are surfaced but not treated as failures. Default false.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations cover the safety profile (destructiveHint=true, idempotentHint=false), and the description adds valuable context beyond them: apply captures a 'Before AI Schedule Proposal' baseline and commits all dates in one atomic operation. It also discloses the 100-task cap, feature gate, and role requirement.

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 purpose, then the workflow, then constraints. Dense but every sentence earns its place, though the trailing 'Cap: 100 tasks. Feature: aiAdvanced (PRO+).' fragments are slightly terse.

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

Completeness5/5

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

No output schema exists, so the description carries the return-behavior burden, and it adequately explains the preview-then-apply contract, atomic commit, and baseline capture. 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.

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 workflow meaning to mode beyond the schema's per-parameter text (preview then apply) and frames when apply is safe. previewId and leveling details are already well covered 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 (auto-schedule/propose) and resource (project schedule) with scope: fits all tasks before a target deadline while respecting dependencies. It is clearly distinguishable from siblings like gantt_optimize, resource_leveler_analyze, and propose_deadline_extension.

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 prescribes the multi-turn workflow: call mode="preview" first, then mode="apply" after the user confirms. It also states prerequisites (project Owner or Manager role for apply), a task cap, and the PRO+ feature gate.

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

bulk_assignA
DestructiveIdempotent
Inspect

(Un)assign multiple tasks to one person in a single call. Pass assigneeId (a user id, or null to unassign) OR assigneeEmail (resolved against active org members) - mutually exclusive. Returns { updated, skipped, errors } so partial success is observable: skipped lists tasks already at that assignee; errors lists per-task failures (NOT_FOUND / PROJECT_ACCESS_DENIED). Up to 200 task ids per call. Use the single-task assign_task when you need optimistic-concurrency (expectedAssigneeRevision). Caller must have task.assign on each task's project; the target must be an active member of the organization.

NameRequiredDescriptionDefault
dryRunNoPreview only: return which tasks would be (re)assigned (current -> proposed assignee) and which would be skipped, without committing. Writes nothing, fires no side effects.
taskIdsYes1–200 task ids to (un)assign.
assigneeIdNoUser id, or null to unassign. Mutually exclusive with assigneeEmail.
assigneeEmailNoAlternative to assigneeId. Resolved against active org members by email. Fails the call if not a member.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds substantial context beyond them: the partial-success model (updated/skipped/errors), the meaning of each bucket, per-task error codes (NOT_FOUND / PROJECT_ACCESS_DENIED), and the 200-task cap. This is exactly the write-behavior disclosure 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.

Conciseness5/5

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

Front-loaded with the purpose sentence, then parameters/alternatives, return shape, limits, and permissions in a logical order. Every sentence carries distinct information (mutual exclusivity, return buckets, error codes, cap, permissions) with no padding.

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

Completeness5/5

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

With no output schema, the description discharges the return-value burden by describing the { updated, skipped, errors } shape and error codes, and it covers limits and auth requirements for a mutation tool. 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 description coverage is 100%, so the mutual exclusivity of assigneeId/assigneeEmail, the null-to-unassign semantics, and email resolution are already documented in the schema. The description largely restates these, so the baseline 3 for a fully-covered schema 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+scope: '(un)assign multiple tasks to one person in a single call.' It also distinguishes itself from the sibling assign_task by naming the exact differentiating capability (optimistic concurrency via expectedAssigneeRevision), so an agent can tell the two apart without opening either schema.

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

Usage Guidelines5/5

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

Names the alternative explicitly ('Use the single-task assign_task when you need optimistic-concurrency') with the condition that selects it, and states the caller prerequisite (task.assign on each project) plus the target constraint (active org member). Nothing about routing or eligibility 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.

bulk_create_tasksAInspect

Add a list of up to 50 tasks to an existing Onplana project in one call, at the project root or under a sprint / epic. Fits "add these tasks to my launch project" or a checklist pasted into the chat. Single transaction (all-or-nothing), in place of calling create_task N times; add_subtasks covers new tasks that are children of an existing task. THIS TOOL DOES NOT SCHEDULE. Tasks land with NO dates unless startDate and dueDate are set on each one, and there is no way to express durations or predecessors here at all. A schedule (phase durations, effort estimates, "task 5 depends on task 3", a critical path) sent through this tool arrives as a flat dateless list, and the Gantt, timeline and critical path are all empty. Use instantiate_plan instead, which takes estimatedDays per task and computes real start and due dates from them. It accepts a projectId, so it works on a project that already exists. Neither tool accepts predecessors: create the tasks first, then add each dependency with link_dependency. The result includes url for the project (and one per task). ALWAYS show the project link in your reply so the user can open what you just created.

NameRequiredDescriptionDefault
tasksYes1-50 tasks. Each needs a title; optional description / status / priority / estimatedHours / startDate / dueDate (YYYY-MM-DD) / isMilestone / recurringRule / collaborators.
epicIdNoOptional epic to group them under (must belong to the project).
sprintIdNoOptional sprint to put them in (must belong to the project).
projectIdYesProject to create the tasks in.
idempotencyKeyNoOptional idempotency key. Pass a stable unique value (e.g. a UUID) to make this create safe to retry: calling again with the same key within 24h - even from a new session after a reconnect - replays the original result and creates no duplicate. Org-scoped; works across conversations.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations declare readOnlyHint=false/destructiveHint=false, but the description adds substantial behavioral context the annotations do not: single all-or-nothing transaction, no scheduling/dates unless set per task, no durations or predecessors support, and collaborator failures reported as warnings. The idempotencyKey explanation is consistent with idempotentHint=false (opt-in retry safety), not a contradiction.

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

Conciseness5/5

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

Front-loads the core action and scope in the first sentence, then layers exclusions and alternatives. Despite its length, nearly every sentence carries non-redundant routing or behavioral information, so the size is justified by the tool's complexity.

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 5-parameter batch mutation with no output schema, the description covers transaction semantics, scheduling limitations, dependency handling, and even the response's `url` field plus a directive to show the link. Nothing an agent needs to call it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the schema carries the parameter baseline. The description still adds meaning by clarifying that tasks land with NO dates unless startDate/dueDate are set on each item, which reframes how the date fields must be used. It does not go deeper on sprintId/epicId or idempotency edge cases beyond what the schema states.

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

Purpose5/5

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

States a specific verb and resource with scope: 'Add a list of up to 50 tasks to an existing Onplana project in one call, at the project root or under a sprint / epic.' It also explicitly distinguishes itself from siblings create_task (single), add_subtasks (children of existing task), and instantiate_plan (scheduling), so an agent can route without opening any schema.

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

Usage Guidelines5/5

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

Gives concrete usage triggers ('add these tasks to my launch project', a checklist pasted into chat), names the alternative for scheduling ('Use instantiate_plan instead'), and clarifies the dependency workflow ('create the tasks first, then add each dependency with link_dependency'). When-to-use, when-not, and alternatives are all spelled out.

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

bulk_create_workspace_rowsAInspect

Append many rows to a workspace list (table) in one call, where create_workspace_row appends a single row per call. rows is an array, each entry a map of columnId to value (string|number|boolean|null); a row may omit any column. Unknown column ids are refused. Limits per call: 200 rows and 3000 cells in total, whichever is reached first, so a wide list takes fewer rows per call than a narrow one. Rows are appended in the order given, and the whole batch lands or none of it does.

NameRequiredDescriptionDefault
rowsYesEach entry is one row, as a map of columnId -> value.
tableIdYes

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond the annotations: unknown column ids are refused, per-call limits of 200 rows and 3000 cells (whichever hits first, with the wide-vs-narrow list implication), append order is preserved, and the batch is atomic ('the whole batch lands or none of it does'). Annotations only supply the generic write/non-idempotent/non-destructive profile, and nothing here contradicts them.

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 and the sibling contrast, then packs value-format, validation, limits, ordering, and atomicity into tight clauses with no filler. Every sentence carries distinct operational information.

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

Completeness4/5

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

For a 2-param, no-output-schema tool, the description covers validation, limits, ordering, and atomicity — the traits an agent needs to call it safely. It omits what the call returns (e.g., created row ids) and any permission prerequisites, which is a minor but real gap.

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 only 50% (tableId undocumented), and the description compensates thoroughly for the opaque `rows` array: each entry is a map of columnId to value with types (string|number|boolean|null), columns may be omitted, and unknown column ids are rejected. This adds substantial meaning beyond the schema's terse 'map of columnId -> value'.

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

Purpose5/5

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

Specific verb+resource ('Append many rows to a workspace list (table) in one call') with explicit contrast to the single-row sibling create_workspace_row, so an agent can route between the two without opening schemas. The parenthetical '(table)' disambiguates the resource name.

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 frames the alternative ('where create_workspace_row appends a single row per call'), making the bulk-vs-single choice clear. It stops short of stating when not to use it (e.g., updates should use update_workspace_row, or that it only appends and cannot modify existing rows).

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

bulk_update_statusA
DestructiveIdempotent
Inspect

Flip status on multiple tasks in one call. Use this instead of N update_task calls when marking siblings DONE / blocking a batch / reopening a set. Returns { updated, skipped, errors } so partial success is observable. Up to 50 task ids per call. Tasks the caller can't change are skipped, not errored. Triggers parent-auto-close rollup once for the whole batch (not per task).

NameRequiredDescriptionDefault
dryRunNoPreview only: return which tasks would flip (current -> proposed status) and which would be skipped, without committing. Writes nothing, fires no side effects.
statusYesTarget status to set on every listed task.
taskIdsYes1–50 task ids to update.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare destructive/idempotent/non-readonly, and the description layers on genuinely new behavior: the return shape { updated, skipped, errors } for partial-success observability, skip-vs-error semantics for unauthorized tasks, and a single parent-auto-close rollup per batch rather than per task. These are consequential side-effect details 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.

Conciseness5/5

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

Five tight sentences, each earning its place, with the core purpose and the update_task alternative front-loaded. No filler or redundancy.

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

Completeness5/5

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

No output schema exists, but the description supplies the return shape and partial-success semantics, plus batch limits and side-effect behavior. 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 description coverage is 100%, so dryRun, status, and taskIds are already fully documented, and the description's 'Up to 50 task ids per call' merely restates maxItems: 50. It adds no syntax or format 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.

Purpose5/5

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

States a specific verb and resource ('Flip status on multiple tasks in one call') and immediately distinguishes itself from the single-task sibling update_task. An agent can tell exactly what this does and how it differs from update_task and bulk_update_tasks without opening any schema.

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

Usage Guidelines5/5

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

Explicitly routes the agent: 'Use this instead of N update_task calls when marking siblings DONE / blocking a batch / reopening a set.' It names the alternative and the conditions that select this tool, covering when-to-use and when-to-use-something-else.

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

bulk_update_tasksA
DestructiveIdempotent
Inspect

Apply the same partial update to many tasks at once. Pass taskIds (max 50) and any combination of: status (TODO/IN_PROGRESS/REVIEW/DONE/BLOCKED), priority (LOW/MEDIUM/HIGH/CRITICAL, a ranking label that does not put a task on the critical path), shiftDueDateDays (positive or negative integer to add to each task's dueDate). Per-task failures are reported in errors but do not abort the whole call. Permission: task.edit.any on each task's project. PREFER bulk_update_status when the ONLY change is status (cheaper, atomic, single parent-rollup pass).

NameRequiredDescriptionDefault
dryRunNoPreview only: return the per-task diff (current vs proposed) + which tasks would be skipped, without committing. Writes nothing, fires no side effects.
statusNo
taskIdsYesUp to 50 task ids.
priorityNoPriority label (LOW/MEDIUM/HIGH/CRITICAL) that people set to rank work. It is not the critical path: the schedule engine computes that from dependencies, durations and the calendar, and priority does not change it.
shiftDueDateDaysNoInteger days to add to each task's dueDate. Negative = earlier.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare destructiveHint/readOnlyHint/idempotentHint, but the description adds genuinely new behavior: a hard batch cap of 50, partial-failure semantics ('per-task failures are reported in `errors` but do not abort the whole call'), and the required permission. It stops short of explaining rollback scope or what a successful response body contains, keeping it at a strong 4 rather than 5.

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

Conciseness4/5

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

Front-loads the purpose, then parameters, then failure/permission semantics, then the alternative tool – a logical order with almost no filler. The priority definition duplicates the schema's own wording, a minor redundancy that keeps it just under 5.

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

Completeness5/5

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

There is no output schema, and the description compensates by naming the `errors` field for partial failures and by specifying the batch limit and permission. Combined with the alternative routing, an agent has everything needed to invoke and interpret the call 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?

With 80% schema coverage the baseline is 3, but the description adds real meaning: priority is explained as a ranking label that does NOT drive the critical path (a subtle and valuable disambiguation), and shiftDueDateDays is clarified as a relative signed offset. taskIds and status simply restate the schema.

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

Purpose5/5

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

States a specific verb and resource ('Apply the same partial update to many tasks at once') and immediately distinguishes itself from bulk_update_status by name. An agent can tell it apart from update_task (single) and bulk_update_status (status-only) without opening any schema.

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

Usage Guidelines5/5

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

Explicitly names the alternative and the condition that selects it: 'PREFER bulk_update_status when the ONLY change is status (cheaper, atomic, single parent-rollup pass)'. It also states the permission prerequisite (task.edit.any per project), so the routing decision needs no inference.

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

calculate_evmA
Read-onlyIdempotent
Inspect

Earned Value Management report for one project as of a given date (default: now). Returns BAC, EV, PV, AC, CPI, SPI, EAC, ETC, plus EV/PV/AC in revenue currency when the org has billable rates. With no actual cost recorded, CPI, CV, EAC, ETC and VAC are null and actualCostRecorded is false: report them as N/A, not on budget. PREFER calculate_evm_history for time-series. Access: callers who may read the project cost: org OWNER/ADMIN, or budget.read at their project role (by default project OWNER and MANAGER). Plan gate: aiAdvanced.

NameRequiredDescriptionDefault
asOfNoISO date; defaults to now.
projectIdYes

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already cover the read-only/idempotent safety profile, but the description adds substantial context beyond them: the currency-conversion condition for billable-rate orgs, the exact null-behavior of CPI/CV/EAC/ETC/VAC when no actual cost is recorded, the actualCostRecorded=false flag, and the instruction to report those as N/A rather than 'on budget'. It also discloses authorization and plan-gate requirements.

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

Conciseness4/5

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

Front-loaded with purpose and scope, then progressively less critical detail (return fields, null semantics, routing preference, access, plan gate). Dense but every sentence carries operational information; the null-handling and routing clauses are somewhat compressed into long multi-clause sentences.

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

Completeness5/5

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

No output schema exists, but the description enumerates the returned metrics and, importantly, explains the null/flag semantics that would otherwise be misinterpreted. Combined with the access rules and plan gate, 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.

Parameters3/5

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

Schema coverage is 50% — asOf is documented ('ISO date; defaults to now.') while projectId has no schema description. The description confirms asOf's default and scopes projectId to a single project, which partially compensates, but adds no format or constraint detail for projectId. Baseline 3 for 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?

States a specific verb+resource+scope: 'Earned Value Management report for one project as of a given date'. It enumerates the returned metrics (BAC, EV, PV, AC, CPI, SPI, EAC, ETC) and explicitly distinguishes itself from the sibling calculate_evm_history, so an agent can disambiguate 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 alternative and the condition that selects it: 'PREFER `calculate_evm_history` for time-series'. It also states the access prerequisites (org OWNER/ADMIN or budget.read at project role) and the aiAdvanced plan gate, so an agent knows both when to route elsewhere and whether the caller can invoke it at all.

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

calculate_evm_historyA
Read-onlyIdempotent
Inspect

EVM time-series for one project: each point carries the date, PV and AC (the S-curve). CPI and the estimates are in calculate_evm, which returns them null when no actual cost is recorded. Powers the S-Curve and trajectory analyses. Same access + plan gate as calculate_evm. points is empty when dataSource is "none" (no imported costs, rate card or default rate to price hours with), the same rule calculate_evm applies.

NameRequiredDescriptionDefault
projectIdYes

TDQS

A4.4/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 adds substantial non-obvious behavior: the exact contents of each point, that `points` is empty when `dataSource` is "none", the reason (no imported costs, rate card or default rate), and the access/plan gate requirement. This is real behavioral disclosure beyond 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.

Conciseness4/5

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

Return shape is front-loaded and every sentence carries information (division of labor, gating, empty-result rule). The final sentence is dense, with a nested parenthetical about pricing hours, but it is not 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?

With no output schema, the description fully covers what the agent needs: the point structure, the empty-result edge case and its cause, the access/plan prerequisite, and the sibling boundary. Nothing required to invoke or interpret the result is missing.

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

Parameters3/5

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

Schema coverage is 0% for the single `projectId` parameter, so the description carries the burden; it implies scoping to 'one project' but gives no id format or source. It also references `dataSource`, which is not an input parameter, which could momentarily confuse an agent about what it can pass.

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 ('EVM time-series for one project') and enumerates the returned series (date, PV, AC / S-curve). It explicitly demarcates itself from the closest sibling by saying CPI and estimates live in `calculate_evm`, so an agent can pick between them 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 assigns the CPI/estimate use case to `calculate_evm` and describes this tool as powering S-Curve and trajectory analyses, plus notes the shared access and plan gate. What it lacks is an explicit negative case or trigger phrasing (e.g. 'use this when you need the trend over snapshots, not a point-in-time index').

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

cancel_workflow_runA
DestructiveIdempotent
Inspect

Cancel an in-progress workflow run. Caller must be able to manage the workflow. Feature: automations (PRO+).

NameRequiredDescriptionDefault
runIdYesID of the workflow run to cancel.

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 and idempotentHint=true, so the safety profile is covered. The description contributes real extra context: only in-progress runs are affected, the caller needs manage permission, and the feature requires a PRO+ plan.

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, action front-loaded, then the eligibility constraints. Nothing is padded and no sentence 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 one-parameter destructive tool with full annotation and schema coverage, the description covers scope, permissions and feature gating adequately. It omits what happens after cancellation (reversibility, effect on running tasks), which is a minor gap rather than a blocking one.

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

Parameters3/5

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

There is a single parameter with 100% schema description coverage, so the schema fully documents runId. The description adds no format, source, or lookup guidance for the ID, and per the high-coverage baseline a 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 ('Cancel an in-progress workflow run') and constrains scope to in-progress runs, which cleanly separates it from list_workflow_runs and get_workflow_run. It does not name a sibling explicitly, so it falls short of the top band.

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 permission prerequisite ('caller must be able to manage the workflow') and a plan gate ('automations (PRO+)'), which tells the agent when the call will succeed. However, it never contrasts this with alternatives such as decide_workflow_approval or test_run_workflow, 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.

capture_baselineAInspect

Capture a point-in-time baseline snapshot of a project (tasks, dates, progress, EVM). Caller must be a project Owner or Manager. Available on every plan.

NameRequiredDescriptionDefault
nameNoLabel for this baseline. Defaults to "Baseline".
projectIdYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already disclose the safety profile (not read-only, not idempotent, not destructive, closed-world). The description adds real value beyond them: the authorization requirement, plan availability, and exactly what data the snapshot freezes. It stops short of saying whether repeated captures create multiple baselines or what the returned snapshot 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?

Two tight sentences that front-load the action and scope, then append the authorization and plan constraints. No filler, no repetition of the schema.

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

Completeness4/5

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

With no output schema and a trivial two-parameter input, the description supplies the essentials: what is captured, who may call it, and availability. It lacks any statement of side effects (does capturing a baseline alter project state, or how it relates to existing baselines), which is the only meaningful 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 50%: `name` is documented in the schema (with its default), while the required `projectId` has no description anywhere. The description mentions no parameters at all, so it does not compensate for the undocumented required field, though `projectId` is self-explanatory.

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 ("Capture") and resource ("point-in-time baseline snapshot of a project") and enumerates the captured content (tasks, dates, progress, EVM). It is clearly distinguishable from get_baseline/compare_baseline/list_baselines by action, though it never names those siblings to reinforce 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?

Gives strong prerequisites ("Caller must be a project Owner or Manager", "Available on every plan") which help an agent decide whether the call can succeed. However, it offers no guidance on when to snapshot versus when to read or compare existing baselines, so alternative-selection is left implicit.

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

claim_taskA
Idempotent
Inspect

Take an exclusive execution lease on one task before working on it, so a second agent on the same board does not do the same work. Returns claimed=true with an expiry, or claimed=false naming the agent already executing it, or claimed=false when the task is already DONE (with its status and when it changed). The lease lapses on its own after 10 minutes, so a crashed agent never blocks a task permanently; call renew_task_lease about every 3 minutes while the work continues, and release_task when finished. Optional ttlMinutes sets a different lifetime. A lease does not change who the task is assigned to and does not grant any permission; use assign_task for ownership. Caller needs task.edit.any on the project, or task.edit.own on a task they are assigned or created.

NameRequiredDescriptionDefault
taskIdYesTask to lease.
ttlMinutesNoLease lifetime in minutes. Defaults to 10, capped at 60.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only say non-read-only, non-destructive, idempotent; the description goes far beyond with lease expiry semantics (10 minutes, self-lapsing so a crashed agent cannot block a task), all three return shapes including the already-DONE case, the fact that a lease grants no permission, and the exact permission requirements (task.edit.any / task.edit.own).

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 and the mutual-exclusion rationale, then layers return values, lease lifecycle, related tools, and permissions in a compact sequence. Every sentence carries distinct information; none is filler.

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

Completeness5/5

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

There is no output schema, so the description must carry return values, and it does so completely (claimed true/false, competing agent, DONE status with change time). Combined with lifecycle, alternatives, and auth, 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% and the schema already documents ttlMinutes with its default of 10 and cap of 60. The description's mention that it 'sets a different lifetime' adds no syntax or constraint detail beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Take an exclusive execution lease on one task') with the exact scope and motivation ('so a second agent on the same board does not do the same work'). It explicitly separates itself from assign_task, which an agent might otherwise confuse with claiming work.

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

Usage Guidelines5/5

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

Gives explicit when-to-use ('before working on it'), the ongoing cadence ('call renew_task_lease about every 3 minutes'), the termination step ('release_task when finished'), and the alternative for a different need ('use assign_task for ownership'). Nothing about routing between siblings is left to inference.

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

compare_baselineA
Read-onlyIdempotent
Inspect

Computed variance of a project against one of its baselines: project finish slip (calendar days), an on-track / at-risk / behind rating, counts of delayed / on-time / ahead / added / removed tasks, and the worst slippers with their start, finish, planned-duration and started-late variance. Duration variance uses the stored planned duration, not the date span. Also returns summary: the comparison in plain English (paragraphs on the finish and the chain of tasks driving it, scope, cost where the caller may read it, tasks added and removed, and a list of the five largest start or finish moves), built without AI, the same text the Baselines tab shows. Use get_baseline for the raw snapshot. Available on every plan.

NameRequiredDescriptionDefault
maxTasksNoHow many worst slippers to return (default 10).
baselineIdYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already carry the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower. The description still adds real value: the summary is 'built without AI, the same text the Baselines tab shows' (deterministic, reproducible output), duration variance uses the stored planned duration rather than the date span, and availability is stated.

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

Conciseness4/5

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

Front-loaded with the tool's purpose and result shape in the first sentence, and the routing hint and availability note come last. It is dense and long, but with no output schema the field enumeration earns its space; only the double-length first sentence could be tightened.

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 and one undocumented parameter, the description does the compensating work: it enumerates every returned field and describes the summary contents down to the 'five largest start or finish moves'. An agent can reason about the result without inferring anything.

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%: maxTasks is documented and baselineId is not. The description implies baselineId scope ('one of its baselines') and confirms the 'worst slippers' meaning of maxTasks, but adds no format or ID-source detail. Baseline 3 is right given partial 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?

States a specific verb (computed variance) and resource (project against one of its baselines) and enumerates the exact outputs: finish slip in calendar days, RAG rating, task counts, worst slippers. It explicitly distinguishes itself from get_baseline, so an agent can route 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?

Names the alternative get_baseline and the condition for choosing it ('for the raw snapshot'), and notes availability ('Available on every plan'), which rules out plan-gating surprises. It stops short of an explicit when-not or prerequisite statement, so it lands 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.

compose_evm_narrativeAInspect

Generate a plain-language EVM narrative for a project and deliver it to the Agent inbox for review. Fetches BAC/EV/PV/AC/CPI/SPI/EAC and writes a PMO-quality prose document into the Agent Deliverables library. Returns the artifact id and conversation id once the narrative is drafted. Plan gate: aiCore (every plan). Access: callers who may read the project cost: org OWNER/ADMIN, or budget.read at their project role (by default project OWNER and MANAGER). The Onplana agent saves the draft, so it needs Contributor access or above on the project.

NameRequiredDescriptionDefault
localeNoOptional. The language to write in, as an app language code: en, es, pt-BR, fr, ar, zh-CN, ja, de or it. Anything else, or nothing, is English.
projectIdYesID of the project to generate the EVM narrative for.

TDQS

A4.1/5.0
Behavior5/5

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

Goes well beyond the annotations by disclosing the data it reads (BAC/EV/PV/AC/CPI/SPI/EAC), the write side effects (artifact persisted to the Agent Deliverables library and delivered to the Agent inbox), the return values (artifact id, conversation id), and the exact permission/contributor requirements for a non-destructive but mutating operation.

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

Conciseness4/5

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

Purpose and delivery targets are front-loaded in the first sentence, followed by data sources, return values, and gating rules in a logical order. The 'Plan gate: aiCore (every plan)' fragment is slightly terse but each sentence carries usable information.

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

Completeness4/5

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

For a two-parameter mutation tool with no output schema, the description covers inputs, side effects, return identifiers, and access requirements. It does not address repeat-invocation behavior (annotations mark idempotentHint=false, implying duplicate artifacts) or failure modes, which would complete the picture.

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 (projectId, locale with its enumerated language list) are fully documented in the schema. The description adds no additional parameter semantics, so the baseline 3 applies.

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

Purpose4/5

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

Names a specific verb and resource ('Generate a plain-language EVM narrative for a project') and states the delivery destinations (Agent inbox, Agent Deliverables library). It does not explicitly distinguish itself from related siblings like calculate_evm, critical_path_narrative, or leveling_narrative, so an agent must infer the boundary.

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

Usage Guidelines4/5

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

Gives concrete preconditions for use: the aiCore plan gate, read access to project cost (org OWNER/ADMIN or budget.read at project role), and Contributor access on the project so the agent can save the draft. It stops short of naming when to prefer a sibling narrative tool or when not to use this one.

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

compose_meeting_briefAInspect

Generate a structured meeting agenda for a project and deliver it to the Agent inbox for review. Reads the live project facts: progress and task counts, tasks completed in the last 7 days, overdue tasks, the overdue and the next milestones with their due dates (up to 5 of each), the top 5 open risks and the top 5 open issues by severity, and the project overview with its 15 most recently updated tasks. Writes a ready-to-share agenda (goals, status, risks, milestones, decisions needed). Returns the artifact id and conversation id once the agenda is drafted. Plan gate: aiCore (every plan). Access: any project member.

NameRequiredDescriptionDefault
projectIdYesID of the project to generate the meeting agenda for.

TDQS

A4/5.0
Behavior5/5

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

Goes well beyond the annotations: it enumerates exactly which live project facts are read (progress, task counts, 7-day completions, overdue, milestones, top risks/issues, recent tasks), what is written (goals/status/risks/milestones/decisions), the return values (artifact id, conversation id), the plan gate (aiCore), and access requirements (any project member). This is rich disclosure of side effects and prerequisites.

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 in the first sentence, followed by progressively more detail. The enumerated read list is long but each item is concrete and useful; no filler sentences. Slightly verbose but well structured.

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 compose/generation tool with no output schema, the description covers inputs read, output produced, returned identifiers, plan gate, and access — everything an agent needs to invoke it correctly. 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?

Schema description coverage is 100% and the single projectId parameter is fully documented in the schema, so the schema carries the load. The description adds only that the agenda is generated 'for a project', which does not significantly extend parameter meaning beyond what the schema 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 ('Generate a structured meeting agenda') and resource (meeting agenda/brief for a project), so the agent can tell it apart from generic status tools. It does not, however, explicitly distinguish itself from close siblings like compose_meeting_invite or compose_status_digest. Clear verb+resource but no 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?

The description implies usage via the deliver-to-inbox workflow ('deliver it to the Agent inbox for review') but never states when to choose this over compose_meeting_invite, compose_status_digest, or generate_status_report. No explicit when-to-use or when-not-to-use conditions are given. Implied context only.

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

compose_meeting_inviteAInspect

Compose a draft meeting in the authorized user's own Outlook calendar. Draft only, nobody is invited: the event is created without attendees (Microsoft sends an invitation for any event created with attendees), and the proposed attendees are listed in its body. The user opens it from the returned webLink, adds the attendees and sends it from Outlook. Onplana has no step that sends a meeting invitation. Returns the event id, webLink, attendeesInvited (always 0) and proposedAttendees. Per-invite external attendee cap: 10. Uses existing Calendars.ReadWrite scope.

NameRequiredDescriptionDefault
bodyYes
endUtcYesISO datetime.
subjectYes
locationNo
startUtcYesISO datetime.
attendeesYesProposed attendees (email addresses). Listed in the event body, not invited.
bodyContentTypeNo
reminderMinutesNo

TDQS

A4.5/5.0
Behavior5/5

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

Adds substantial context beyond the annotations: the event is created without attendees because Microsoft auto-invites any event with attendees, the proposed attendees are placed in the body instead, the external attendee cap is 10, and the Calendars.ReadWrite scope is required. It also discloses the return payload since 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.

Conciseness4/5

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

Front-loads the critical constraint (draft, no attendees) in the first two sentences and keeps every sentence informational. It runs slightly long, but no sentence is filler given the non-obvious Microsoft invitation behavior it has to explain.

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 return fields (event id, webLink, attendeesInvited, proposedAttendees) and covers the safety/scope profile. Only a few low-salience parameters (location, reminderMinutes, bodyContentType) remain undocumented, 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 38%, and the description clarifies the semantically tricky 'attendees' parameter (proposed, listed in body, not invited) and adds the 10-external-attendee cap. However, subject, body, location, bodyContentType, reminderMinutes and the UTC datetime formats get no additional explanation, leaving half the parameters on the schema alone.

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

Purpose5/5

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

States a specific verb (Compose) plus resource and scope (a draft meeting in the authorized user's own Outlook calendar). The 'draft only, nobody is invited' clause sharply distinguishes it from send_outlook_message, post_teams_channel_message, and compose_meeting_brief.

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

Usage Guidelines5/5

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

Explicitly defines the workflow: create the draft, open it via the returned webLink, add attendees and send from Outlook. It also states the negative case — 'Onplana has no step that sends a meeting invitation' — so an agent knows not to look for a follow-up send tool.

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

compose_release_notesAInspect

Generate structured release notes for a project from the tasks marked done in the last 30 days (up to 30, newest first; a task with no completion date counts by its last update), grouped by epic or theme, and deliver the draft to the Agent inbox for review. Known issues come from the open issues and overdue tasks, next planned work from the next milestones. Output includes a summary, changes by area, known issues, and next planned work; when no task was done in the window, the notes state that. Returns the artifact id and conversation id once the notes are drafted. Plan gate: aiCore (every plan). Access: any project member.

NameRequiredDescriptionDefault
projectIdYesID of the project to generate release notes for.

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the annotations (which only declare readOnly=false, non-idempotent, non-destructive), the description discloses that a draft artifact is created and routed to the Agent inbox, that the return value is an artifact id plus conversation id, and the plan gate (aiCore) and access level (any project member). That is exactly the mutation-side context an agent cannot get from the annotations.

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

Conciseness4/5

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

Dense but front-loaded: the core purpose and window come first, then source-of-sections, output shape, edge case, return value, and gate/access. Every clause carries information, though the single long run-on could be tightened.

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 enumerating the output sections (summary, changes by area, known issues, next planned work), the empty-window behavior, and the returned ids. Combined with the access and plan-gate 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.

Parameters3/5

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

There is a single parameter with 100% schema description coverage, so the schema already documents projectId fully. The description references 'a project' but adds no format or constraint detail beyond the schema, matching the baseline 3 for schema-carried parameters.

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

Purpose5/5

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

States a specific verb+resource (generate structured release notes for a project) and pins down the exact input scope (tasks marked done in the last 30 days, grouped by epic/theme). This scope naturally separates it from neighbors like compose_status_digest and compose_meeting_brief.

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

Usage Guidelines4/5

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

Gives clear context for use: current-window work, delivery to the Agent inbox for review, and the plan-gate/access conditions. It does not explicitly name an alternative tool or an exclusion case, so it stops short of a 5.

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

compose_status_digestAInspect

Generate a concise weekly status report for a project and deliver it to the Agent inbox for review. Assembles the project context bundle and writes a structured status report (health, accomplishments, risks, next steps) into the Agent Deliverables library. Returns the artifact id and conversation id once the digest is drafted. Plan gate: aiCore (every plan). Access: any project member; the CPI and SPI line appears only when the caller may read the project cost.

NameRequiredDescriptionDefault
localeNoOptional. The language to write in, as an app language code: en, es, pt-BR, fr, ar, zh-CN, ja, de or it. Anything else, or nothing, is English.
projectIdYesID of the project to generate the status digest for.

TDQS

A3.7/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=false, idempotentHint=false), and the description adds genuinely new behavior: it writes a persistent artifact into a specific library, routes it to the Agent inbox for review, and returns artifact id plus conversation id. It also discloses two access rules an agent could not infer — the aiCore plan gate and the conditional CPI/SPI line tied to cost-read permission.

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

Conciseness4/5

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

Roughly four sentences, all front-loaded: purpose first, then mechanics, then return values, then the gate/access caveats. Dense but each clause carries distinct information; only the access/CPI sentence drifts slightly late for a caller-scoping 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 two-parameter mutation tool with no output schema, the description covers the essentials: what gets produced, where it lands, what is returned (artifact id, conversation id), when the call is permitted (plan gate, project membership), and the conditional cost line. The one real gap is sibling disambiguation against generate_status_report.

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

Parameters3/5

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

Schema description coverage is 100%: projectId and locale are both documented, including the accepted language code list, so the schema carries parameter meaning. The description adds nothing about parameters 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 (generate a weekly project status report), the content it contains (health, accomplishments, risks, next steps), where it writes (Agent Deliverables library) and where it delivers (Agent inbox). What it does not do is differentiate itself from the sibling generate_status_report or week_status, so an agent cannot tell from this text alone which of those to pick.

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 rather than contrasted: it says it is a weekly digest for review by an agent, and it states the plan gate (aiCore) and access level (any project member), which helps an agent decide if it may call at all. But there is no explicit when-to-use-vs-alternative guidance, which matters given generate_status_report, week_status and summarize_project all live next door.

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

compute_risk_patternsA
Read-onlyIdempotent
Inspect

Aggregate risks across the caller's visible projects by category. Returns acceptedCount, dismissedCount, affectedProjects, and a verdict (recurring | frequently_dismissed | mixed) per category. Drives the "Pattern (X/Y projects)" badge on the Critical Risk Register widget. Optional windowDays (1..365, default 90) bounds the detection lookback.

NameRequiredDescriptionDefault
windowDaysNoLookback window in days, 1..365. Default 90.

TDQS

A4.5/5.0
Behavior5/5

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

With no output schema, the description carries the return-shape burden and does so fully: it names acceptedCount, dismissedCount, affectedProjects, and the verdict enum (recurring | frequently_dismissed | mixed). Annotations already cover the read-only/idempotent/non-destructive safety profile, so this adds genuine behavioral value on top.

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 with no waste, front-loading the aggregate action and scope before the return details and the optional parameter. Every sentence earns its place.

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

Completeness5/5

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

For a one-param read tool with no output schema, the description supplies the return fields, the verdict semantics, the widget purpose, and the lookback bound. 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 the single optional param is already documented as '1..365, default 90'. The description restates the same facts without adding new meaning, so the baseline of 3 is appropriate.

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

Purpose5/5

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

States a specific verb (aggregate) and resource (risks), plus scope (caller's visible projects, by category). This clearly differentiates it from org-wide siblings like list_org_risk_patterns and per-project analyzes like analyze_project_risks.

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 'caller's visible projects' scope and the note that it drives the Critical Risk Register badge give clear context for when this applies. However, it never explicitly names an alternative tool or a when-not condition, leaving sibling selection to inference.

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

create_change_requestBInspect

Create a DRAFT change request on a project (scope, schedule, budget, resource or other change). Requires project membership. Feature: changeControl (ENTERPRISE+).

NameRequiredDescriptionDefault
typeYes
titleYes1-200 chars.
dealIdNoOptional. The deal this change renegotiates, so the budget impact can be read against what was sold.
priorityNoDefault MEDIUM.
projectIdYes
descriptionYesFull description of the change.
linkedRisksNo
rollbackPlanNo
sourceTaskIdNoOptional. The task this change is raised from, a task in the same project. The task shows the request among what is connected to it.
justificationNo
customerImpactNo
idempotencyKeyNoOptional idempotency key. Pass a stable unique value (e.g. a UUID) to make this create safe to retry: calling again with the same key within 24h - even from a new session after a reconnect - replays the original result and creates no duplicate. Org-scoped; works across conversations.
complianceNotesNo
scopeDescriptionNo
approvalThresholdNo1-100. Default 51.
budgetImpactAmountNo
scheduleImpactDaysNoSigned integer days.
resourceDescriptionNo
alternativesConsideredNo

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already declare non-destructive, non-read-only. The description adds real context beyond them: the record is created in DRAFT state, membership is required, and the changeControl feature gate (ENTERPRISE+) will reject calls otherwise. It does not discuss the optional idempotency key or returned identifier, but the feature/reachability context is genuinely useful.

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-loaded with the action and state. The parenthetical type list is the only low-value filler since it duplicates the enum.

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?

Good on access constraints and lifecycle state, but for a 19-parameter mutation with no output schema, the agent gets no signal about what is returned (an ID?) or the natural next step (submit_change_request). Adequate but with clear gaps.

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 42% across 19 parameters. The description's enumeration of change types merely restates the type enum, and it says nothing about the many undocumented fields (linkedRisks, rollbackPlan, justification, customerImpact, complianceNotes, approvalThreshold, budgetImpactAmount). With low coverage, the description should compensate and does not.

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

Purpose4/5

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

Specific verb plus resource (create a DRAFT change request on a project) and the parenthetical names the change categories. The DRAFT qualifier usefully previews the create/submit split with siblings like submit_change_request, though it never names them 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?

States prerequisites (project membership, changeControl feature at ENTERPRISE+) and that the result is a draft, which implies a follow-up submission step. It never explicitly says when to use this instead of submit_change_request or list_change_requests, leaving routing to inference.

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

create_commentAInspect

Post a comment on a task, project, issue OR client company (exactly one parent). Useful for AI-generated status updates, follow-ups, or notes - including progress on an Issue you filed. Caller must have visibility into the parent project. Task comments support two threads: the focused human-agent thread (threadKind 'AGENT', the task's [Agent] tab) and the team thread (threadKind 'general', the [Comments] tab). Comments default to the team thread, including your own progress/status updates. Set threadKind 'AGENT' ONLY to reply in the focused [Agent] thread - i.e. when replying to a comment you read (via get_task / list_comments / list_related_tasks) whose threadKind is 'AGENT', echo that value so the directed conversation stays in one thread.

NameRequiredDescriptionDefault
taskIdNoComment on a task. Exactly one of taskId/projectId/issueId.
contentYes1-5000 chars. Plain text is formatted: blank lines separate paragraphs, lines starting "- " or "* " become a bulleted list, lines starting "1. " a numbered list.
issueIdNoComment on an Issue (Issue Log). Exactly one of taskId/projectId/issueId/companyId.
companyIdNoComment on a client company (Onplana Services). Exactly one of taskId/projectId/issueId/companyId.
projectIdNoComment on a project. Exactly one of taskId/projectId/issueId.
threadKindNoTask comments only. 'AGENT' = the focused human-agent thread ([Agent] tab); 'general' = the team thread ([Comments] tab). Defaults to the team thread; set 'AGENT' only to reply in the focused human-agent thread.
idempotencyKeyNoOptional idempotency key. Pass a stable unique value (e.g. a UUID) to make this create safe to retry: calling again with the same key within 24h - even from a new session after a reconnect - replays the original result and creates no duplicate. Org-scoped; works across conversations.

TDQS

A4.5/5.0
Behavior4/5

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

Adds real context beyond the annotations: an authorization prerequisite ('Caller must have visibility into the parent project'), the default routing behavior (comments land in the team thread, including the agent's own status updates), and the directed-conversation pattern for replying. Annotations already cover the safe/non-destructive profile, so the remaining gap is minor.

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 what, then the routing rules, so the highest-value information is read first. The final sentence is long and parenthetical-heavy, but each clause carries a distinct rule 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?

Covers parent selection, content formatting expectations, thread routing, and the visibility prerequisite for a 7-parameter create tool with no output schema. The only uncovered area, retry/idempotency semantics, is handled adequately by the schema's own parameter description.

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 baseline is 3, but the description goes further by explaining the operational intent behind threadKind ('[Agent] tab' vs '[Comments] tab') and by warning that the parameter applies to task comments only. The idempotencyKey parameter is left entirely to the schema.

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

Purpose5/5

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

States a specific verb ('Post a comment') and enumerates the four supported parent resources, with the exactly-one-parent constraint up front. An agent can immediately distinguish this from edit_comment and list_comments without opening any schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use ('AI-generated status updates, follow-ups, or notes - including progress on an Issue you filed') and a precise when/when-not for threadKind: default to the team thread, and set 'AGENT' ONLY when echoing a threadKind you read back from get_task/list_comments/list_related_tasks. It even names the read tools that supply that value.

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

create_cost_lineAInspect

Add a cost line to a project's budget list: what the money is for, the amount in the PROJECT currency, and whether it is EXPECTED, COMMITTED or SPENT. There is no currency argument: convert the amount first. A SPENT line counts in the project's earned value actual cost. Access: the project budget's write rule (project.edit and budget.read on the project).

NameRequiredDescriptionDefault
dateNoThe day, YYYY-MM-DD; null clears it. A SPENT line counts in earned value actual cost from this day (from the day it was entered when there is none).
noteNoFree text, at most 2000 characters; null clears it.
labelYesWhat the money is for, e.g. "Electrical works". 1 to 200 characters.
amountYesThe amount in the PROJECT currency, at most 2 decimal places, 0 or more.
statusNoEXPECTED (planned, nothing ordered), COMMITTED (ordered, a purchase order), SPENT (paid or invoiced). Defaults to EXPECTED on create.
taskIdNoA task in the same project this cost belongs to; null clears it.
categoryNoThe project's own grouping word, e.g. "Works". At most 80 characters; null clears it.
projectIdYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only declare the generic mutating profile (readOnly=false, idempotent=false, destructive=false); the description adds non-obvious behavior: the currency must be pre-converted to the project currency, and a SPENT line feeds the project's earned-value actual cost. It also states the exact permission requirement, which annotations do not cover.

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

Conciseness5/5

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

Three tight sentences: purpose first, then the currency trap, then the EVM consequence and access rule. Every clause carries information the agent cannot get from the schema or annotations.

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

Completeness5/5

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

For an 8-parameter, non-idempotent create tool with 88% schema coverage and no output schema, the definition covers the risky unknowns: units, side effects on earned value, and authorization. Nothing important for a correct first call is missing.

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

Parameters4/5

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

Schema coverage is already 88%, so the baseline is 3; the description adds real meaning on top by explaining the monetary unit of amount and the business meaning of the EXPECTED/COMMITTED/SPENT status values. The date parameter's earned-value effect is only in the schema, so the description does not fully duplicate the value.

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

Purpose5/5

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

States a specific verb and resource ("Add a cost line to a project's budget list") and immediately enumerates the three data dimensions it captures. An agent can tell this is the create-side of the cost-line family versus list_cost_lines or update_cost_line without opening the schema.

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

Usage Guidelines4/5

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

Gives clear preconditions in the form of a hard constraint ("There is no currency argument: convert the amount first") plus the authorization rule (project.edit and budget.read). It never names list_cost_lines or update_cost_line as alternatives, so there is no explicit when/when-not routing, which keeps it below a 5.

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

create_custom_field_defAInspect

Create a custom field definition (PRO+ feature). fieldType: one of TEXT, TEXTAREA, NUMBER, DATE, DROPDOWN, MULTI_SELECT, CHECKBOX, URL, EMAIL, PHONE, CURRENCY, RATING. entityType: PROJECT, TASK, or PROPOSAL. DROPDOWN/MULTI_SELECT require at least one option. Omit projectId for an org-wide field (admin/manager only). Set projectId to scope the field to one project (project owner/manager allowed).

NameRequiredDescriptionDefault
nameYes1-100 chars.
optionsNoRequired for DROPDOWN/MULTI_SELECT.
requiredNoWhether this field is mandatory.
fieldTypeYes
projectIdNoScope to one project. Null or omit for org-wide.
entityTypeYes
descriptionNoOptional field description.
defaultValueNoOptional default value.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnly=false, destructive=false, idempotent=false), so the bar is lower, and the description adds real context the annotations lack: the PRO+ feature gate and the differing authorization rules for org-wide (admin/manager) vs project-scoped (project owner/manager) fields. It still omits return behavior and uniqueness constraints.

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

Conciseness4/5

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

Purpose is front-loaded in the first clause and the remaining sentences are dense with constraints and no filler. Slightly enumeration-heavy, but every sentence carries operational information.

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

Completeness4/5

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

For a mutation tool with no output schema, the description covers the key domain constraints (tier, valid types, option requirement, scoping and authorization). It is nearly complete, missing only what happens on success or on a name collision.

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 baseline is 3. The description largely restates what the schema already encodes — the fieldType/entityType enumerations and the option requirement for DROPDOWN/MULTI_SELECT — adding only the role implications of projectId rather than new syntax or format 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?

States a specific verb ('Create') and resource ('custom field definition') and immediately scopes it with the PRO+ tier gate. It is unambiguous against siblings like update_custom_field_def, list_custom_field_defs, and set_custom_field_value.

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 selection guidance for the projectId parameter (omit for org-wide vs set to scope to one project) and ties each path to an allowed role. It does not explicitly name the sibling to use for editing or listing, 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.

create_epicAInspect

Create an Epic on one project. Epics group related tasks under a business theme. Required: projectId, title (2-200 chars). "name" is accepted as a deprecated alias for title (until 2026-11-27). Optional: description (up to 5000 chars), color (hex like "#6366F1" or CSS name; defaults to indigo). The new epic is appended at the end of the project's epic order. Caller must have project.content.create on the project (default: project MEMBER+).

NameRequiredDescriptionDefault
nameNoDEPRECATED alias for title (accepted until 2026-11-27). Prefer title.
colorNoHex like "#6366F1" or CSS colour name.
titleNoEpic title, 2-200 chars (canonical field name).
projectIdYesProject to attach the epic to.
descriptionNoUp to 5000 chars.
idempotencyKeyNoOptional idempotency key. Pass a stable unique value (e.g. a UUID) to make this create safe to retry: calling again with the same key within 24h - even from a new session after a reconnect - replays the original result and creates no duplicate. Org-scoped; works across conversations.

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already declare this is a non-read-only, non-destructive, non-idempotent write; the description adds material context beyond them: the required auth scope, the positional side effect ('appended at the end of the project's epic order'), and the deprecation window for the 'name' alias. Auth requirements and ordering side effects are exactly the kind of behavior an agent cannot infer from the hints.

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

Conciseness4/5

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

Front-loaded with purpose, then required fields, then optional fields, then side effect and permission — a logical order with no filler. It is dense but not padded, though the alias/deprecation detail is repeated verbatim from the schema and could be trimmed.

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

Completeness4/5

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

For a 6-param mutation tool with no output schema and full annotation coverage, the description supplies purpose, validation bounds, auth scope, ordering behavior, and deprecation timing. It does not say what the call returns (e.g. the new epic's id) or whether duplicate titles are permitted, which are minor residual gaps.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents every parameter including the deprecated alias and idempotencyKey semantics. The description largely restates those constraints (title 2-200, description 5000, color hex/default indigo) rather than adding syntax the schema lacks, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb+resource ('Create an Epic on one project') and immediately defines the domain concept ('Epics group related tasks under a business theme'). This clearly separates it from create_task, create_project, and update_epic 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 the scoping condition ('on one project'), the required inputs, and the prerequisite permission ('project.content.create, default project MEMBER+'), which tells the agent whether the call will succeed. It does not explicitly name update_epic as the alternative for modification or state 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.

create_evaluation_criterionAInspect

Create an org-specific evaluation criterion for a governance gate. Requires org.governance.manage (Admin+ by default). Feature: governance (ENTERPRISE+).

NameRequiredDescriptionDefault
gateYes
nameYes1-100 chars.
orderNoDisplay order. Auto-assigned if omitted.
weightNoNon-negative weight.
optionsNoFor DROPDOWN field type.
maxScoreNo1-100.
fieldTypeNo
descriptionNo

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare this is a non-read-only, non-idempotent, non-destructive write. The description adds genuinely new behavioral context beyond that: the Authorization requirement (org.governance.manage, Admin+ by default) and the licensing gate (ENTERPRISE+). It stops short of noting duplicate-name behavior or defaults, so not a 5.

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

Conciseness5/5

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

Three short sentences, front-loaded with the purpose, then permission, then feature gate. Every clause carries distinct 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 an 8-parameter mutation tool with no output schema and 63% schema coverage, the description covers authorization and licensing well but omits how fields interact (e.g., options only apply to DROPDOWN, weight/maxScore constraints) and what is returned on creation. Adequate but with clear gaps.

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 63% across 8 parameters, and the description contributes no parameter meaning at all beyond the implied 'gate' target. Ambiguous fields like fieldType, weight, and options (which feed DROPDOWN/SCORE semantics) get no explanation in either the description or the partially-covered 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 (Create) and resource (org-specific evaluation criterion) scoped to a governance gate, which cleanly separates it from update_evaluation_criterion and list_evaluation_criteria. It does not name siblings explicitly, but the create/update/list distinction is unambiguous 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?

Gives prerequisites rather than selection guidance: it names the required permission (org.governance.manage, Admin+ default) and the ENTERPRISE+ governance feature. It never says when to create a criterion versus updating an existing one or how this relates to gate review workflows, 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.

create_goalAInspect

Create a goal / objective / OKR in the caller's org. title is required. Optional: description, type (OBJECTIVE / KEY_RESULT / INITIATIVE, default OBJECTIVE), parentId (existing goal to nest under), projectIds (array of project ids to link), startDate + dueDate (ISO). Caller becomes the owner. Use create_key_result to add measurable KRs to the new goal once it exists.

NameRequiredDescriptionDefault
typeNoDefault OBJECTIVE.
titleYes1-200 chars. Required.
dueDateNoISO date by which the goal should be met.
parentIdNoParent Goal id for nesting (OKR tree).
startDateNoISO date when the goal period starts.
projectIdsNoProject ids to link via GoalProject.
descriptionNoOptional, up to 10000 chars.
idempotencyKeyNoOptional idempotency key. Pass a stable unique value (e.g. a UUID) to make this create safe to retry: calling again with the same key within 24h - even from a new session after a reconnect - replays the original result and creates no duplicate. Org-scoped; works across conversations.

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare this is a non-destructive, non-open-world, non-idempotent write, so the safety profile is covered. The description adds genuinely useful behavior: the caller becomes the owner, and parentId nests within an existing goal. However, it is silent on the `idempotencyKey` retry semantics that the schema documents (and the idempotentHint=false annotation arguably undersells), leaving a notable gap for a create tool.

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

Conciseness4/5

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

Front-loaded with the core action, then the required field, then optionals, then the hand-off sibling — a logical order. Efficient overall, though 'title is required' duplicates the schema's own required declaration.

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, it covers the required field, defaults, ownership, and the next-step sibling. It does not indicate what the call returns (e.g., the new goal id), which the agent needs to chain into create_key_result or update_goal, a minor 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 coverage is 100%, so the schema already documents all 8 parameters including enums and the detailed idempotencyKey text. The description largely restates those fields (type default, parentId nesting, projectIds linking) rather than adding new syntax or format meaning, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Create a goal / objective / OKR in the caller's org') and explicitly names the sibling it hands off to for a related operation ('Use `create_key_result` to add measurable KRs'). An agent can distinguish it from the many other create_* tools without opening a schema.

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

Usage Guidelines4/5

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

Gives clear context for use (goals in the caller's org) and an explicit alternative for the follow-up step via create_key_result. It lacks any when-not guidance or prerequisites (e.g., feature/tier gating), so it stops short of the top score.

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

create_ideaAInspect

Capture an IDEA: an uncommitted, possibly half-formed thought. Use this instead of create_task when the thing is not agreed work yet. An idea has no assignee and no due date and never appears in anyone's task list, so capturing one costs the user nothing. It is PRIVATE to the capturing user until they share it or open it to the org (visibility is controlled in the web app). projectId is OPTIONAL: omit it for a "General" idea that is not tied to a project yet, which is the normal case when someone is just thinking out loud. Promote it later with promote_idea. Returns the new idea's id, idea (id, title, status) and url (its link in the Onplana web app).

NameRequiredDescriptionDefault
titleYesThe idea in one line, 1-500 chars.
companyIdNoOptional. The client who asked for this, when a client did. Omit for internal ideas.
projectIdNoOptional. Omit for a General (unfiled) idea.
sourceUrlNoOptional origin URL, when captured from a page.
descriptionNoOptional detail, up to 10000 chars.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations declare a non-destructive, non-read-only, non-idempotent write; the description adds genuinely new behavior: the idea is private to the capturing user until shared, never appears in anyone's task list, and visibility is changed in the web app. It also describes the return payload. It does not address duplicate/retry behavior implied by idempotentHint=false, a minor gap.

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

Conciseness4/5

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

Front-loads the core definition, then escalates to contrast with create_task, privacy, projectId guidance, and return shape. Every sentence carries information, though the paragraph is on the long side for a single create call.

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 fields (id, idea with id/title/status, url), covers the privacy model, the optional-vs-required parameter split, and the promotion path. Nothing an agent needs to invoke this correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all five parameters including the 'omit for a General (unfiled) idea' wording. The description reinforces the projectId case and adds the reasoning behind it, but contributes little textual meaning beyond the structured fields; 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 ('Capture an IDEA') and immediately defines the resource's distinguishing nature: uncommitted, possibly half-formed, no assignee, no due date. It explicitly distinguishes itself from the sibling create_task, 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 Guidelines5/5

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

Gives an explicit when-to-use rule ('use this instead of create_task when the thing is not agreed work yet'), names the alternative tool, and adds the follow-up path ('Promote it later with promote_idea'). projectId omission guidance ('normal case when someone is just thinking out loud') further disambiguates usage.

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

create_issueAInspect

File a new Issue (PMBOK Issue Log: a problem that has already happened and needs triage). Use this - NOT create_task - for bugs, blockers, and materialized problems. projectId is OPTIONAL: omit it to file an organization-level ("General") issue when you do not know which project it belongs to. type: OPERATIONAL/TECHNICAL/SCHEDULE/RESOURCE/BUDGET/SCOPE/QUALITY/EXTERNAL/OTHER. severity: LOW/MEDIUM/HIGH/CRITICAL. Optionally link a materializing risk, a fix-task, or a change request. Starts in OPEN. Returns the new issue's id, issue (id, title, status) and url (its link in the Onplana web app).

NameRequiredDescriptionDefault
typeYes
titleYes1-500 chars.
ownerIdNoOptional user id who owns triage.
severityYes
companyIdNoOptional. The client who reported this, when a client did. Omit for internally-found issues.
projectIdNoOptional. The project the issue belongs to; omit for an org-level (General) issue.
linkedCrIdNoOptional ChangeRequest.
descriptionNoOptional detail, up to 10000 chars.
linkedRiskIdNoOptional ProjectRisk this materialized from.
linkedTaskIdNoOptional fix-Task.
targetResolutionAtNoOptional ISO datetime target.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations cover the safety profile (not read-only, not destructive, not idempotent), so the burden is lighter. The description adds real behavioral context beyond that: the issue starts in OPEN status, and the return payload (id, issue object, url) is described. It doesn't mention permission requirements or duplicate-creation behavior, keeping it short of a 5.

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

Conciseness4/5

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

Information-dense with no filler and the key routing rule (use this not create_task) is front-loaded. The enum lists make it slightly list-heavy, but every sentence carries unique, useful information.

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

Completeness4/5

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

For an 11-parameter mutation tool with no output schema, the description covers the critical optional-parameter semantics and describes the return shape itself. A few parameters (targetResolutionAt, ownerId, companyId, description) are left to the schema, which is reasonable given 82% coverage.

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

Parameters4/5

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

Schema coverage is 82%, so the schema already documents most parameters. The description adds meaning beyond the schema by spelling out the type and severity enums, the projectId omit-for-General semantics, and the optional risk/task/change-request linkage purpose. This meaningfully complements rather than repeats 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 (File) and resource (a new Issue) and anchors it to PMBOK Issue Log semantics as 'a problem that has already happened and needs triage'. It explicitly distinguishes itself from the sibling create_task, 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 Guidelines5/5

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

Gives an explicit when-to-use and when-not: 'Use this - NOT create_task - for bugs, blockers, and materialized problems', plus a conditional rule for omitting projectId to file an org-level General issue. This is directly actionable routing guidance.

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

create_key_resultAInspect

Attach a measurable Key Result to an existing goal. Required: goalId, title, targetValue (number > 0). Optional: unit (default "%"), startValue (default 0), rollupMethod (TASK_COUNT or TASK_PERCENTAGE, leave unset for manual updates via update_key_result_value). Any org member except a Guest may add one.

NameRequiredDescriptionDefault
unitNoDisplay unit, e.g. "%", "users", "$". Default "%".
titleYes1-200 chars. Required.
goalIdYesParent goal id. Required.
startValueNoBaseline. Default 0.
targetValueYesPositive target the KR aims to reach.
rollupMethodNoOmit for manual updates.
idempotencyKeyNoOptional idempotency key. Pass a stable unique value (e.g. a UUID) to make this create safe to retry: calling again with the same key within 24h - even from a new session after a reconnect - replays the original result and creates no duplicate. Org-scoped; works across conversations.

TDQS

A4.4/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). The description adds value the annotations don't: an authorization rule ('Any org member except a Guest may add one') and default behaviors for unit/startValue. It omits the idempotencyKey retry behavior that the schema describes, which is the one notable behavioral gap.

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

Conciseness5/5

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

Three dense sentences: purpose, parameter contract, authorization. Required parameters and the one branching parameter are front-loaded; no sentence 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?

For a 7-parameter mutation tool with no output schema, it covers the required inputs, defaults, enum usage, permissions, and the manual-vs-rollup fork. The only meaningful omission is any mention of the idempotencyKey retry contract, which the schema handles but the description ignores.

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 restating required vs. optional grouping, the >0 constraint on targetValue, defaults for unit/startValue, and the enum values plus the semantic meaning of omitting rollupMethod (manual updates).

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+parent: 'Attach a measurable Key Result to an existing goal.' An agent can immediately separate this from create_goal (creates the parent) and update_key_result_value (mutates an existing KR).

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 routes one decision explicitly: leave rollupMethod unset for manual updates via `update_key_result_value`, which names the sibling tool and the condition that selects it. It also states who may call it. It does not give broader when-to-use context vs. create_goal, but the create-vs-update boundary is implied clearly by 'existing goal'.

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

create_libraryAInspect

Create a document library. Specify exactly one scope: projectId, proposalId, or scope="org" for a tenant-level (organization) library. name is 1..200 chars; optional description. Project libraries require project.content.create (Viewers are read-only); org libraries require org.library.manage (MANAGER+ by default). Agent-created libraries are always user-visible, never the system's auto-stash variant.

NameRequiredDescriptionDefault
nameYes1..200 chars.
scopeNoSet "org" for a tenant-level library (the caller's organization).
projectIdNo
proposalIdNo
descriptionNo

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only declare the mutation/safety profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false, openWorldHint=false), so the description's added context is genuinely valuable: required permissions per scope, the Viewer read-only caveat, MANAGER+ default for org libraries, and the guarantee that agent-created libraries are user-visible and never the system auto-stash variant.

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

Conciseness4/5

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

Front-loaded with the action, then constraints, then permissions, then the visibility caveat — a sensible order with no filler. Slight deduction because the 'name is 1..200 chars' clause duplicates the schema's own description text, and the sentences are dense and multi-clause.

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 5-param mutation tool with no output schema, the description covers scope selection, validation bounds, authorization requirements, and the visibility semantics of the created object. Nothing an agent needs in order to call it correctly is missing.

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

Parameters5/5

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

Schema coverage is only 40% (projectId, proposalId, and description are undocumented), but the description compensates fully: it names all three scope selectors, explains the 'exactly one' exclusivity rule, and restates the name length bound plus the optional description. An agent can construct a valid call from the description alone.

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

Purpose4/5

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

Opens with a specific verb+resource ('Create a document library') and immediately enumerates the three mutually exclusive scoping modes, which cleanly separates it from create_project, create_proposal, and upload_library_document. It never explicitly names a sibling it is not, so differentiation is implicit rather than stated.

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

Usage Guidelines4/5

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

Explicitly states the calling constraint ('Specify exactly one scope: projectId, proposalId, or scope="org"') and gives the per-scope permission prerequisites, so an agent knows the correct invocation shape. It stops short of when-not-to-use guidance or pointing at alternatives such as upload_library_document for existing libraries.

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

create_milestoneAInspect

Create a milestone on one project (zero-duration marker for key dates). Caller must have milestone.create on the project.

NameRequiredDescriptionDefault
titleYes2-200 chars.
dueDateYesISO date.
projectIdYes
idempotencyKeyNoOptional idempotency key. Pass a stable unique value (e.g. a UUID) to make this create safe to retry: calling again with the same key within 24h - even from a new session after a reconnect - replays the original result and creates no duplicate. Org-scoped; works across conversations.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so safety is largely covered. The description adds a genuine behavioral fact not in the annotations: the required milestone.create permission on the target project. It omits return shape, but that is a minor gap against annotation coverage.

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

Conciseness5/5

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

Two short sentences, zero filler, with the core action and its scope front-loaded before the permission caveat. Nothing here is redundant with the name or the annotations.

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 4-parameter mutation tool with no output schema, the description covers purpose and authorization but says nothing about what is returned (e.g., a milestone id) or duplicate/error behavior beyond what the schema's idempotencyKey note supplies. Adequate but with visible 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 coverage is 75%, so most parameters carry their own descriptions (title length bounds, ISO date format, and a detailed idempotencyKey contract). The description only indirectly gestures at projectId via "on one project" and adds no semantics beyond the schema, so baseline 3 is appropriate.

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

Purpose5/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 milestone") plus scope ("on one project") and a semantic differentiator ("zero-duration marker for key dates") that separates it from sibling create_task or create_epic. An agent can tell what this tool produces without opening the schema.

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

Usage Guidelines3/5

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

It states a hard precondition (caller must hold milestone.create on the project), which tells the agent when the call will be permitted. However, it offers no guidance on when to prefer this over siblings like update_milestone, propose_milestone_completion, or list_milestones, and no exclusions or alternative routing.

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

create_office_documentAInspect

Create a blank, editable Office document (Word .docx, Excel .xlsx, or PowerPoint .pptx) in a workspace document library. The file appears in the Documents tab and a person can open it in the in-browser Office editor to co-edit it. Use this (not draft_document, which only makes markdown) when the deliverable should be a real Office file the team will edit. kind is one of word | cell | slide (aliases: document/docx, spreadsheet/xlsx, presentation/pptx). libraryId must reference an existing library; create one first via create_library if needed. Requires project.content.create (CONTRIBUTOR+; Viewers are read-only).

NameRequiredDescriptionDefault
kindYesDocument kind. word/document/docx, cell/spreadsheet/xlsx, or slide/presentation/pptx.
nameNoOptional document name (max 200 chars). Defaults to "Untitled document/spreadsheet/presentation".
libraryIdYesLibrary to create the document in.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already establish the non-read-only, non-destructive, non-idempotent profile, so the bar is lower. The description still adds real behavior: the file lands in the Documents tab and can be co-edited in the in-browser Office editor, and it requires the project.content.create permission (CONTRIBUTOR+, Viewers read-only). It does not touch duplicate-name or repeat-call behavior, so a 4 rather than 5.

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

Conciseness5/5

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

The verb+resource is front-loaded, followed by the alternative-routing rule, format aliases, prerequisite, and permission note. Five dense sentences, each of which carries distinct 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?

There is no output schema, yet the description still tells the agent what gets created, where it appears, how it will be edited, what permissions are needed, and which sibling to use instead. For a creation tool with three simple parameters, nothing an agent needs 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 enum aliases and the name default are already documented, giving a baseline of 3. The description goes slightly beyond the schema by spelling out that libraryId must reference an existing library and how to obtain one via create_library, adding actionable 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?

States a specific verb and resource ('Create a blank, editable Office document') and enumerates the three formats, so the agent knows exactly what is produced. It also distinguishes itself from the sibling draft_document by noting that the latter only makes markdown.

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

Usage Guidelines5/5

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

Explicitly says when to use this versus the alternative ('Use this (not draft_document...) when the deliverable should be a real Office file the team will edit'), and adds the prerequisite for libraryId ('create one first via create_library if needed'). Nothing about 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.

create_pageAInspect

Create a web part page (PRO+ feature). Omit projectId for an organization page; pass projectId for a project page. content is optional Puck Data JSON (root + content[]) validated against the component allowlist and https-only url policy (see describe_schema Page); omit it to start empty. Requires contribute access to the org workspace (org page) or the project (project page).

NameRequiredDescriptionDefault
iconNoOptional emoji icon (max 16 chars).
titleYes1-255 chars.
contentNoOptional Puck Data JSON: { root: { props }, content: ComponentData[] }. Validated server-side.
projectIdNoOptional. Omit for an org page; pass for a project page.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare non-read-only, non-idempotent, non-destructive. The description adds real value beyond them: PRO+ gating, server-side validation against a component allowlist and https-only url policy, the 'omit content to start empty' default, and the contribute-access requirement.

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 purpose, then scoping, then content rules, then permissions. Information-dense but each clause earns its place; only lightly long.

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

Completeness4/5

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

Given no output schema, the description still covers scoping, validation policy, permission prerequisites, and the empty-content default. An agent has enough to invoke correctly, though the return shape is unspecified.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description reinforces projectId scoping and content validation but largely restates what the schema already documents, adding only the 'omit it to start empty' behavioral note.

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

Purpose4/5

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

States a specific verb and resource ('Create a web part page') with the org-vs-project scope distinction made explicit. It does not, however, differentiate itself from the nearby create_wiki_page or create_whiteboard siblings, so an agent must infer the boundary.

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

Usage Guidelines4/5

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

Gives clear routing guidance: omit projectId for an org page, pass it for a project page, and states the access requirement for each case. It stops short of naming alternative tools or when-not-to-use conditions.

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

create_portfolioAInspect

Create a portfolio (BUSINESS+ feature). The caller becomes the portfolio owner. Requires org.portfolio.manage (default Manager+).

NameRequiredDescriptionDefault
nameYesPortfolio name, at least 2 chars.
descriptionNoOptional description.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare the mutation/safety profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false), so the bar is lower. The description adds genuinely useful non-obvious behavior: the caller becomes owner, and the authorization prerequisite with a default role threshold.

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 compact sentence, front-loaded with the action and followed by the two facts an agent most needs (ownership outcome and permission). 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 simple two-param creation tool with no output schema, the description covers action, ownership side effect, tier, and authorization. Minor gaps (duplicate-name behavior, whether the new portfolio id is returned) are low-impact.

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% — both 'name' (min 2 chars) and optional 'description' are fully documented in the schema. The description adds no parameter syntax or format detail, so this is the baseline 3, not a penalty.

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 portfolio') and immediately distinguishes it from siblings like update_portfolio and list_portfolios. The parenthetical feature-tier note adds scope precision without ambiguity.

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 clear context: BUSINESS+ tier, required permission org.portfolio.manage with a default Manager+ role. It doesn't explicitly state when not to use it vs. update_portfolio or add_project_to_portfolio, so it stops just 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.

create_projectAInspect

Create a new, EMPTY project in the user's Onplana workspace: a named container with an optional start and end date and no tasks yet. Fits "start a project called X" or "set up a project for our office move" when there is no work to put in it yet. When the request includes the work itself ("plan a website launch", "set up a project with the tasks for X"), instantiate_plan creates the project and its whole plan in one call; calling this tool first and then instantiate_plan without a projectId produces two projects and leaves this empty one behind. An id from this tool passed to instantiate_plan as projectId fills this project with a plan instead. Tasks can also go in with create_task or bulk_create_tasks. The caller becomes the project owner. If start/end are omitted, the project runs from today to about 90 days out, adjustable later with update_project. In an organization that classifies its projects, type STRATEGIC is refused: a strategic project there starts as a proposal and is created when the proposal passes its gate. list_projects with search shows whether a similarly named project already exists. The result carries nextSteps: the follow-on calls with this project id already filled in. A project left at "created" is an empty project the user then has to fill by hand. The result includes url, a direct link to the project in Onplana. ALWAYS show that link in your reply: the user is working inside another app and has no other way to find what was just created.

NameRequiredDescriptionDefault
nameYesProject name, 2–255 chars.
typeNoSTRATEGIC or OPERATIONAL. STRATEGIC is refused in an organization that classifies its projects, where a strategic project starts as a proposal.
colorNoOptional hex color for UI display.
budgetNoOptional numeric budget in the project currency.
statusNoDefault PLANNING.
endDateNoOptional ISO 8601 end date (YYYY-MM-DD). Defaults to ~90 days after the start when omitted; when both are given it must be after startDate.
currencyNoISO 4217 currency code, 3 letters. Default USD.
startDateNoOptional ISO 8601 start date (YYYY-MM-DD). Defaults to today when omitted.
descriptionNoOptional description, up to 10000 chars.
idempotencyKeyNoOptional idempotency key. Pass a stable unique value (e.g. a UUID) to make this create safe to retry: calling again with the same key within 24h - even from a new session after a reconnect - replays the original result and creates no duplicate. Org-scoped; works across conversations.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare the safety profile (readOnly=false, destructive=false, idempotent=false, openWorld=false). The description adds non-obvious behavior: the caller becomes owner, default date range of today to ~90 days, STRATEGIC being refused in classifying orgs, and that the result carries nextSteps and a url. That is substantial disclosure beyond what the annotations provide.

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

Conciseness4/5

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

Front-loads purpose and the key routing rule in the first two sentences, then layers prerequisites, side effects, and return-value handling. It is long, and a few clauses (e.g. restating the date default) echo the schema, but almost every sentence 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?

With no output schema, the description correctly describes the returned artifacts (`nextSteps`, `url`) and instructs the agent to surface the link. For a 10-parameter mutation tool it covers ownership, defaults, refusal cases, idempotency, and follow-on calls, leaving no critical 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 description coverage is 100%, so the baseline is 3 and the schema already documents defaults for startDate/endDate and the STRATEGIC enum. The description reinforces the date-default behavior ('adjustable later with update_project') and the STRATEGIC refusal, but does not add much syntax the schema lacks.

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, EMPTY project') and immediately qualifies scope ('a named container with an optional start and end date and no tasks yet'). The EMPTY emphasis plus explicit contrast with instantiate_plan lets an agent distinguish it from the sibling that also creates projects.

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 user phrasings for when to use it ('start a project called X') and when not to ('plan a website launch'), naming instantiate_plan as the alternative. It also warns about the specific failure mode (two projects, empty one left behind) and points to list_projects with `search` for duplicate checking.

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

create_proposalBInspect

Create a DRAFT governance proposal for review through the pipeline (DRAFT to APPROVED/REJECTED). Feature: governance (ENTERPRISE+).

NameRequiredDescriptionDefault
titleYes1-255 chars.
currencyNo3-letter ISO currency code (e.g. USD).
priorityNo
riskLevelNo
sponsorIdNoUser ID of the sponsor (must be org member).
departmentNo
descriptionNo
idempotencyKeyNoOptional idempotency key. Pass a stable unique value (e.g. a UUID) to make this create safe to retry: calling again with the same key within 24h - even from a new session after a reconnect - replays the original result and creates no duplicate. Org-scoped; works across conversations.
estimatedBudgetNoPositive number.
expectedBenefitsNo
estimatedDurationNoWeeks as positive integer.
strategicAlignmentNo
businessJustificationNo

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare this is a non-read-only, non-destructive, non-idempotent write, so the safety profile is covered. The description adds useful context the annotations lack: the created record starts in DRAFT and is intended to flow through an approval pipeline, plus an enterprise feature gate. It omits behavioral details such as permission requirements or side effects like notifications/reviews triggered.

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

Conciseness4/5

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

Two tight sentences, front-loaded with the core action and no filler. The parenthetical '(DRAFT to APPROVED/REJECTED)' is compact but slightly ambiguous about whether this tool performs the transition or merely feeds it, which is the only structural blemish.

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 13-param creation tool with no output schema, the description covers purpose, initial state, and feature gating but omits what the call returns, required permissions beyond the feature tier, and how it relates to advance_proposal_stage/submit_proposal_review. Adequate but with clear gaps given the tool's complexity.

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?

With 13 parameters and only 46% schema description coverage, the description carries a larger burden but contributes nothing about parameters — no mention of title, priority, riskLevel, sponsorId, or the idempotencyKey retry behavior documented in the schema. Several params are self-descriptive by name, which keeps this above 1, but the low coverage is not compensated.

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 DRAFT governance proposal') and pins the created object's initial lifecycle state, which distinguishes it from update_proposal and advance_proposal_stage. It does not name a sibling tool explicitly, so an agent must infer the boundary from the DRAFT-to-APPROVED lifecycle phrase.

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

Usage Guidelines3/5

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

The description implies when to use it (creating a new proposal for review) and adds a real prerequisite via the 'governance (ENTERPRISE+)' gate. It offers no explicit when-not or alternative routing (e.g., 'to modify an existing proposal use update_proposal', 'to move stages use advance_proposal_stage'), leaving usage context implied rather than stated.

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

create_riskAInspect

Record a risk on a project's risk register (a forward-looking "might happen" - for a problem that HAS happened, file an Issue via create_issue instead). ADDITIVE: creates one ProjectRisk row and never touches existing risks. analyze_project_risks never changes or removes a risk created here. severity: LOW/MEDIUM/HIGH/CRITICAL. category: SCHEDULE/RESOURCE/BUDGET/SCOPE/EXTERNAL. Optionally include a mitigation (the recommended response). Optionally make it a schedule event for the Monte Carlo schedule risk run: probability (0 to 1), impactDays (working days added to EACH affected task when it happens) and affectedTaskIds (tasks in the same project). Caller needs write access to the project.

NameRequiredDescriptionDefault
categoryYes
severityYes
projectIdYesThe project whose risk register gets the entry.
impactDaysNoOptional working days the risk adds to each affected task when it happens.
mitigationNoOptional recommended response / mitigation, up to 5000 chars.
descriptionYesThe risk statement (what might happen and why it matters), 1-5000 chars.
probabilityNoOptional chance the risk happens, 0 to 1 (0.3 is 30%).
affectedTaskIdsNoOptional ids of tasks in this project that the risk would delay.

TDQS

A4.6/5.0
Behavior4/5

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

Beyond the annotations (non-read-only, non-destructive, non-idempotent), the description discloses the write footprint ('creates one ProjectRisk row and never touches existing risks'), that analysis tooling will not mutate what is created here, and that the caller needs project write access. This is solid added context; it stops short of describing the response or duplicate-handling behavior, 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.

Conciseness4/5

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

Dense but well ordered: what it records, the sibling exclusion, the side-effect profile, then the optional advanced fields. The main waste is the verbatim restatement of the two enum value lists, which already exist in the schema as structured data.

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 tool with no output schema and no nested objects, the description supplies what a caller actually needs: write-access prerequisite, additive side effects, non-interference from analysis tools, and the meaning of the optional scheduling parameters. Nothing required to call it correctly is missing.

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

Parameters4/5

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

Schema coverage is 75%, and the description adds real meaning on top: impactDays applies to EACH affected task, affectedTaskIds must be tasks in the same project, and probability/impactDays/affectedTaskIds are a coupled trio enabling the Monte Carlo run rather than three independent knobs. The severity and category values are restated from the schema enums, which is redundant.

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

Purpose5/5

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

States a specific verb and resource ('Record a risk on a project's risk register') and immediately draws the boundary against the most confusable sibling: a risk is a 'might happen', while a problem that already happened belongs in create_issue. 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 Guidelines5/5

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

Gives an explicit when-to-use-this vs when-to-use-the-alternative rule (create_issue for realized problems) and clarifies the relationship to analyze_project_risks. It also names the downstream condition that makes the optional schedule fields worth supplying (the Monte Carlo schedule risk run).

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

create_sprint_with_tasksA
Destructive
Inspect

Create a sprint on a project AND move existing tasks into it in one atomic call. Pass projectId, name, startDate, endDate (ISO), optional goal, and taskIds (existing tasks on the same project to assign - up to 50). Out-of-scope or missing tasks are skipped with reasons; the sprint is still created. Permission: sprint.manage on the project.

NameRequiredDescriptionDefault
goalNoOptional sprint goal, up to 500 chars.
nameYes2-100 chars.
endDateYesISO date - must be after startDate.
taskIdsYesUp to 50 task ids to move.
projectIdYes
startDateYesISO date.
idempotencyKeyNoOptional idempotency key. Pass a stable unique value (e.g. a UUID) to make this create safe to retry: calling again with the same key within 24h - even from a new session after a reconnect - replays the original result and creates no duplicate. Org-scoped; works across conversations.

TDQS

A4.3/5.0
Behavior4/5

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

Adds significant context beyond annotations: it issues skip-and-continue semantics ('out-of-scope or missing tasks are skipped with reasons; the sprint is still created'), states the required permission (sprint.manage), and enforces a 50-task cap. Annotations already cover the destructive/read-only/idempotent profile, so this useful operational detail pushes it above baseline.

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 front-loaded sentences that lead with the atomic create-and-move purpose, then parameters, then failure/permission semantics. Dense and largely waste-free, though the parameter enumeration slightly repeats what the schema already carries.

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-param mutation tool with no output schema, the description covers creation, task movement, partial-failure behavior, limits, and permissions. It doesn't describe the response shape or idempotencyKey usage, but the core behavioral surface an agent needs to invoke it safely is present.

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

Parameters4/5

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

With 86% schema coverage the schema already documents most params, but the description adds meaning the schema lacks: taskIds must be 'existing tasks on the same project,' and it reinforces the ISO date format and the 50-item limit. This is beyond the baseline where the schema would otherwise carry 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?

States a specific combined verb+resource: 'Create a sprint on a project AND move existing tasks into it in one atomic call.' This clearly distinguishes it from siblings like create_task, create_project, and move_task_to_sprint, since the atomic coupling of the two operations is called out explicitly.

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

Usage Guidelines4/5

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

Gives clear context for when to use it: creating a sprint and assigning existing same-project tasks in a single atomic call, with the taskIds scoped to 'existing tasks on the same project.' It stops short of naming the alternative (e.g. move_task_to_sprint) or stating explicit exclusions, so it's a strong 4 rather than a 5.

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

create_tagAInspect

Create a new org-scoped tag/label. Name must be 1-30 chars. Optional color must be a 6-digit hex (#RRGGBB). Requires org.tag.manage permission (default Member+).

NameRequiredDescriptionDefault
nameYes1-30 chars.
colorNoHex color, e.g. #3B82F6. Optional.

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false, and destructiveHint=false, so the mutation profile is covered. The description adds genuinely useful context beyond those annotations: the required org.tag.manage permission (default Member+), which is an auth prerequisite the 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 tight sentences that front-load the action, then the field constraints, then the permission gate. No filler or redundancy; every sentence carries concrete 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 two-parameter creation tool with full schema coverage and annotations covering the mutation profile, this is nearly complete. It could mention duplicate-name behavior or error handling, but nothing essential to correct invocation is missing, and no output schema exists to be explained.

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 name and color are already documented in the schema. The description restates the same constraints (1-30 chars, 6-digit hex) with no additional syntax or default details, which is baseline-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 ('Create a new org-scoped tag/label') with the scope qualifier 'org-scoped' adding precision. It implicitly separates from siblings like assign_tag, unassign_tag, and list_tags by verb, but never names an alternative explicitly.

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

Usage Guidelines2/5

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

No when-to-use or when-not-to-use guidance and no mention of the sibling tag tools (assign_tag, unassign_tag, list_tags). It only surfaces a permission requirement, which is prerequisite context rather than usage routing.

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

create_taskAInspect

Add one task to an existing Onplana project, with an optional assignee, due date, priority and description. Fits "add a task to book the venue by Friday" or "remind me to send the invoice next week" once the project is known. projectId and title are required; list_projects with search finds a project known only by name. A subtask is a task whose parentId is its parent's id. add_subtasks creates 2+ children under the same parent in one atomic call, and instantiate_plan commits a whole project with tasks and risks at once. Pass recurringRule to create a repeating task in one call (set dueDate too). The result includes url, a direct link to the task in Onplana. ALWAYS show it in your reply so the user can open what you just created.

NameRequiredDescriptionDefault
titleYesTask title, 1–500 chars. Required.
epicIdNoOptional epic grouping.
statusNoDefault TODO.
dueDateNoISO date the work must finish.
parentIdNoParent task id for subtasks.
priorityNoPriority label (LOW/MEDIUM/HIGH/CRITICAL) that people set to rank work. It is not the critical path: the schedule engine computes that from dependencies, durations and the calendar, and priority does not change it. Default MEDIUM.
progressNo0–100; default 0.
sprintIdNoOptional sprint to scope the task to.
projectIdYesProject id to create the task in. Required.
startDateNoISO date the work can start.
assigneeIdNoUser id to assign. Must be a member of the org.
descriptionNoOptional description, up to 10000 chars.
isMilestoneNoMark as a milestone (shown as a diamond on Gantt).
assigneeNameNoAlternative to assigneeId - full name, first name, or email of an org member. Resolved fuzzy; ignored when assigneeId is also set.
collaboratorsNoPeople who work on the task besides its assignee, by user id, name or email. They see it in My Work and may update it but not reassign it. Added after the task is created; anyone who cannot be added is reported in warnings.
recurringRuleNoMake the task recurring: { freq: daily|weekly|monthly, interval: int>=1, endDate?: ISO|null }. Omit (or null) for a one-off task. The recurringWorker spawns the next occurrence from the due/start date, so set dueDate (or startDate) too.
estimatedHoursNoEstimated hours of effort.
idempotencyKeyNoOptional idempotency key. Pass a stable unique value (e.g. a UUID) to make this create safe to retry: calling again with the same key within 24h - even from a new session after a reconnect - replays the original result and creates no duplicate. Org-scoped; works across conversations.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare write/non-destructive/openWorld=false, so the bar is lower, yet the description still adds real behavior: idempotencyKey replays the original result within 24h with no duplicate, collaborators are added after creation with unaddable users surfaced as warnings, the recurringWorker spawns the next occurrence, and the result contains a `url` the agent must show. It stops short of failure/permission modes, but that is well beyond the annotation coverage.

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

Conciseness4/5

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

Front-loaded with the core action and required fields, then examples, then routing to alternatives, then the url requirement — a sensible priority order. It is long and repeats the dueDate requirement for recurringRule, but almost every sentence carries routing or behavioral value.

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 18-parameter create tool with no output schema, the description covers the essentials an agent needs: required ids, how to resolve an unknown project, sibling alternatives for bulk/atomic creation, the idempotency escape hatch, and the returned `url`. Only a fuller account of error/permission behavior is missing, which is minor here.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 18 parameters, including the recurringRule-needs-dueDate coupling and assigneeName/assigneeId precedence. The description mostly repeats required fields and the parentId-as-subtask meaning, adding little syntax or semantics the schema does not already carry, 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 (create one task in an existing Onplana project) with the optional fields it accepts, and distinguishes itself from the closest siblings by explaining that a subtask is a task with a parentId while add_subtasks and instantiate_plan handle the multi-item cases.

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

Usage Guidelines5/5

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

Gives explicit user-phrase triggers ("book the venue by Friday") and routing rules: use list_projects with `search` when only the project name is known, add_subtasks for 2+ children under one parent, instantiate_plan for a whole project at once. This is genuine when-to-use/when-to-use-something-else guidance.

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

create_timesheet_entryBInspect

Log hours worked on a task (creates a DRAFT timesheet entry). Hours must be 0.25-24. Date must be today or in the past and within project dates. Feature: timeTracking (PRO+).

NameRequiredDescriptionDefault
dateYesISO date (YYYY-MM-DD). Must not be in the future.
hoursYes0.25 to 24.
notesNo
taskIdYes
projectIdYes
idempotencyKeyNoOptional idempotency key. Pass a stable unique value (e.g. a UUID) to make this create safe to retry: calling again with the same key within 24h - even from a new session after a reconnect - replays the original result and creates no duplicate. Org-scoped; works across conversations.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false). The description usefully adds that the result is a DRAFT (not a submitted entry) and that the feature requires PRO+, which are genuine behavioral facts beyond the annotations. It does not cover retry semantics or how the entry enters approval, so it adds some but not rich context.

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

Conciseness4/5

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

Four compact clauses, front-loaded with the action and output state, then constraints, then feature gating. Every sentence earns its place, though the hours/date constraints duplicate the schema rather than adding new 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 mutation tool with no output schema, it adequately states what is created (a draft entry) and the input preconditions. It omits what happens after creation (approval flow, returned identifier) and the permissions required, leaving some gaps for an agent to close.

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% (taskId, projectId, notes undocumented). The description restates the hours range and future-date rule that the schema already documents, and only 'within project dates' adds new meaning for `date`. It does nothing to compensate for the three undocumented parameters.

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

Purpose4/5

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

States a specific verb+resource ('Log hours worked on a task') and clarifies the output state ('creates a DRAFT timesheet entry'), which meaningfully separates it from submit_timesheet or update_timesheet_entry. It does not explicitly name those siblings, so an agent must infer the workflow position.

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 DRAFT qualifier implies a create-then-submit workflow, and the constraints (hours 0.25-24, date not future, within project dates, PRO+ gating) act as preconditions. However, it never names an alternative tool or states when to reach for create vs update_timesheet_entry vs submit_timesheet, leaving routing to inference.

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

create_whiteboardAInspect

Create a whiteboard. Must specify exactly one of projectId or proposalId. elements is the initial Excalidraw element array (default []); appState is the optional Excalidraw appState slice. Plan gate: whiteboards (PRO+).

NameRequiredDescriptionDefault
nameYes1-200 chars.
appStateNoExcalidraw appState slice.
elementsNoExcalidraw element array (default []).
projectIdNo
proposalIdNo
descriptionNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover the mutation safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=false). The description adds genuinely new behavioral context: the PRO+ plan gate requirement and the mutually-exclusive parent scoping rule, neither of which is derivable from annotations. It stops short of describing the returned entity or side effects.

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, information-dense clauses with the resource first, then parameter constraints, then the plan gate. Nothing is wasted, though the parenthetical default notation is slightly cryptic.

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

Completeness4/5

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

For a 6-parameter create tool with no output schema, the description covers the required name, the exclusivity rule, defaults for the bulk parameters, and the plan gate. The main omission is any indication of what is returned on success, but that is a minor gap for a straightforward create 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 description coverage is 50%, and the description compensates by documenting the two undocumented ID parameters' relationship (exactly one of projectId/proposalId), plus restating the elements default and appState optionality. It does not cover the 'description' field, so it does not fully close the gap, but it meaningfully exceeds 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 ('Create a whiteboard') and immediately scopes it with the exactly-one-of projectId/proposalId constraint, which clearly separates it from get_whiteboard/update_whiteboard/list_whiteboards. It does not explicitly name or contrast those siblings, so it falls short of a 5.

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

Usage Guidelines3/5

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

The 'Must specify exactly one of projectId or proposalId' rule is a real usage constraint that guides invocation. However, there is no statement of when to use this tool versus update_whiteboard or list_whiteboards, nor prerequisites beyond the plan gate, so guidance 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.

create_wiki_pageAInspect

Create a wiki page in a project or proposal (PRO+ feature). Wiki has been retired in favour of Pages: while it is retired this tool creates nothing and returns an error naming create_page, the Pages tool that replaced it. Provide either projectId or proposalId (not both). Title must be 1-200 chars. Icon is an optional emoji (up to 8 chars). Caller must have write access to the parent project.

NameRequiredDescriptionDefault
iconNoOptional emoji icon (max 8 chars).
titleYes1-200 chars.
parentIdNoOptional parent wiki page id (nesting).
projectIdNoParent project. Mutually exclusive with proposalId.
proposalIdNoParent proposal. Mutually exclusive with projectId.

TDQS

A4.4/5.0
Behavior4/5

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

The annotations declare a non-read-only, non-destructive, non-idempotent mutation, but the description goes further and discloses that the call is effectively a no-op that returns an error pointing at create_page. That is the key behavioral fact an agent needs. It stops short of describing the exact error payload or whether the call is logged/audited, so a 4 rather than 5.

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

Conciseness4/5

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

Four tight sentences with no filler, and the retirement/redirect fact is placed early where it will actually change behavior. Minor redundancy from restating schema-documented length limits.

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 retired no-op tool with no output schema, the description supplies exactly what an agent needs: nothing is created, an error naming create_page is returned, parent exclusivity applies, and write access is required. No meaningful gap 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% and every constraint the description mentions (title 1-200 chars, icon max 8 chars, projectId/proposalId mutual exclusivity) is already documented in the schema. The description adds no new 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.

Purpose5/5

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

States a specific verb+resource ('Create a wiki page in a project or proposal') and immediately clarifies its actual current behavior: it is retired and creates nothing. The sibling it maps to (create_page / Pages) is named, so an agent can distinguish it from create_page, update_wiki_page, and get_wiki_page.

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 redirects the agent: Wiki is retired in favour of Pages, this tool errors and names create_page as the replacement. It also gives invocation conditions — provide exactly one of projectId or proposalId, and the caller needs write access on the parent project.

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

create_workspace_rowAInspect

Append a row to a workspace table. cells is a map of columnId to value (string|number|boolean|null). Unknown column ids return 400. Optional order (default = max(order)+1).

NameRequiredDescriptionDefault
cellsYesMap of columnId -> value.
orderNo
tableIdYes
idempotencyKeyNoOptional idempotency key. Pass a stable unique value (e.g. a UUID) to make this create safe to retry: calling again with the same key within 24h - even from a new session after a reconnect - replays the original result and creates no duplicate. Org-scoped; works across conversations.

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly=false, destructive=false, idempotent=false). The description adds real behavioral context beyond that: unknown column ids return 400 (validation failure mode) and the default order value. It does not clarify permission or scope requirements, but the added error semantics are valuable.

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 purpose, then parameter semantics, then a failure mode. Every sentence earns its place with 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 a create tool with no output schema, the description covers validation and ordering but omits any reference to the sibling bulk tool and gives no success/return context. It is minimally sufficient but has clear gaps around tool selection.

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

Parameters4/5

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

Schema coverage is 50%, so the description carries weight. It explains the cells map shape with permitted value types (string|number|boolean|null) and the order default formula max(order)+1, which the schema does not. tableId is self-evident and idempotencyKey is richly documented in the schema, so the compensation is adequate.

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: 'Append a row to a workspace table', which clearly distinguishes it from table-level tools like create_workspace_table. It does not explicitly differentiate from sibling create/injection tools such as bulk_create_workspace_rows or update_workspace_row, so it stops short of a 5.

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

Usage Guidelines2/5

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

The description says nothing about when to use this tool versus alternatives. There is no mention of bulk_create_workspace_rows for multi-row inserts or update_workspace_row for edits, leaving the agent to infer routing entirely.

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

create_workspace_tableAInspect

Create a workspace table (list). Specify exactly one scope: projectId, proposalId, or scope="org" for a tenant-level (organization) list. Optional columns array creates the columns in the same atomic transaction. colType is one of: TEXT, TEXTAREA, NUMBER, DATE, DROPDOWN, MULTI_SELECT, CHECKBOX, URL, EMAIL, PHONE, CURRENCY, RATING. Provide options (string[]) for DROPDOWN and MULTI_SELECT. required is a boolean. Column order in the array determines render order. Use this for genuinely TABULAR reference data (registers, inventories, trackers). It is NOT a plan container: a WBS, work breakdown, task hierarchy or imported schedule belongs in real tasks, since only tasks participate in scheduling, dependencies and rollups. Plans go through instantiate_plan (creates project + tasks + subtasks atomically, and is the only one of these with no monthly cap), or bulk_create_tasks plus add_subtasks. Rows here are created one call at a time and cannot be converted into tasks afterwards.

NameRequiredDescriptionDefault
nameYes1-200 chars.
scopeNoSet "org" for a tenant-level list (the caller's organization).
columnsNo
projectIdNo
proposalIdNo
descriptionNo
idempotencyKeyNoOptional idempotency key. Pass a stable unique value (e.g. a UUID) to make this create safe to retry: calling again with the same key within 24h - even from a new session after a reconnect - replays the original result and creates no duplicate. Org-scoped; works across conversations.

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, openWorldHint=false), and the description adds real value beyond them: columns are created in the same atomic transaction, rows are created one call at a time, and rows cannot be converted into tasks afterwards. It stops short of mentioning permissions or the idempotencyKey retry behavior that the schema describes.

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

Conciseness4/5

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

Front-loaded with the core verb, resource, and scope rule, then column construction, then the sibling-disambiguation paragraph. Efficient overall, though the plan-container exclusion runs long; every sentence still carries routing or parameter 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?

No output schema and 7 params with low coverage, but the description supplies the scope constraint, column construction semantics, type/options rules, and sibling routing. Minor gaps (idempotency, return shape) are acceptable given the annotation and schema coverage.

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

Parameters4/5

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

With only 43% schema description coverage, the description compensates well: it defines the exactly-one-scope rule (projectId / proposalId / scope="org"), enumerates the colType values, specifies options for DROPDOWN and MULTI_SELECT, notes `required` is boolean, and states that column array order determines render order. It adds clear meaning over the bare schema, though it does not address idempotencyKey or 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 specific verb+resource ('Create a workspace table (list)') and immediately differentiates it from siblings by declaring what it is NOT (a plan container) and naming the tools that handle plans (instantiate_plan, bulk_create_tasks, add_subtasks). An agent can route correctly without opening any schema.

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

Usage Guidelines5/5

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

Explicit when-to-use ('genuinely TABULAR reference data (registers, inventories, trackers)') and when-not ('NOT a plan container: a WBS, work breakdown, task hierarchy or imported schedule belongs in real tasks'), with named alternatives and the reason each is preferred. Nothing is left to inference.

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

critical_path_narrativeA
Read-onlyIdempotent
Inspect

Compute the critical path for a project with the schedule engine and return a prose summary. The critical path is the chain of linked tasks with no float, worked out from dependencies, durations, constraints and the project calendar; no field on a task puts it on the path, and task priority is unrelated to it. Returns the ordered critical-task IDs, the bottleneck task, projectEnd (the engine's computed finish), the project's total duration in days, the critical chain's own length in working days (chainDurationDays, the figure the prose quotes), a 2-3 sentence explanation of the chain, autoSchedule, and facts: computedAt, statusDate, criticalTasks (title, computed and stored start and finish, float), computedFinish next to storedLatestDue (the latest due date stored on a task) and projectEndField, finishesAgree, finishGapCalendarDays, finishesLaterThanStored (the tasks the engine finishes after their stored due date, with a reason code) and finishNote, one paragraph stating both finishes and why they differ. The calculation is deterministic (no LLM); the prose falls back to a template when the AI provider is unavailable. No plan gate. Use when the user asks what is on the critical path, which tasks are critical, why a task is or is not critical, asks for tasks to be made critical, or asks when the project or its critical path finishes.

NameRequiredDescriptionDefault
projectIdYesID of the project to compute the critical path for.

TDQS

A4.4/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 adds genuinely new behavioral facts: the calculation is deterministic with no LLM, the prose falls back to a template when the AI provider is unavailable, and there is no plan gate. This is exactly the kind of context annotations cannot carry.

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

Conciseness4/5

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

Purpose is front-loaded in the first sentence, which is good. The middle is a long semicolon-chained inventory of return fields that is dense and hard to parse, but with no output schema present most of those field names do earn their place; only occasional redundancy (e.g. re-explaining chainDurationDays) could be trimmed.

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

Completeness5/5

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

With no output schema, the description must explain return values, and it does so exhaustively (ordered critical-task IDs, bottleneck task, projectEnd, durations, computed vs stored finishes, finishesAgree/finishGapCalendarDays, reason codes). Combined with the usage triggers and behavioral notes, an agent has everything needed to call and interpret it.

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

Parameters3/5

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

Schema description coverage is 100% for the single parameter (projectId is fully documented in the schema), so the schema already carries the parameter burden. The description adds no format or constraint detail beyond it; baseline 3 applies per the high-coverage rule.

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 ('Compute the critical path for a project... and return a prose summary') and then defines the term precisely (chain of linked tasks with no float, derived from dependencies/durations/constraints/calendar). It also pre-empts common misinterpretations ('no field on a task puts it on the path, and task priority is unrelated to it'), which cleanly separates it from sibling tools like schedule_health_check, leveling_narrative and get_schedule_risk.

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?

Ends with an explicit trigger list: 'Use when the user asks what is on the critical path, which tasks are critical, why a task is or is not critical, asks for tasks to be made critical, or asks when the project or its critical path finishes.' That is strong positive guidance, but no negative cases or named alternatives (e.g. versus leveling_narrative or schedule_health_check) are given, so it stops short of a 5.

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

decide_closeout_signoffA
Destructive
Inspect

Record the caller's decision on a closeout that is IN_REVIEW: SIGNED_OFF, or CHANGES_REQUESTED with a comment saying what needs to change. When every active designated reviewer has signed off the closeout is SIGNED_OFF and the person who sent it is told; any change request sends it back to DRAFT and tells them too. A designated reviewer may decide, as may the project Owner or Manager, whose decision can send it back but never counts toward the quorum unless they were named. Refused with CLOSEOUT_NOT_IN_REVIEW when nothing is waiting. Returns the record get_closeout_status returns.

NameRequiredDescriptionDefault
commentNoRequired for CHANGES_REQUESTED; optional for SIGNED_OFF.
decisionYes
projectIdYes

TDQS

A4.3/5.0
Behavior5/5

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

Goes well past the annotations (readOnlyHint=false, destructiveHint=true, idempotentHint=false) by disclosing the state-machine consequences: change requests revert the closeout to DRAFT, full reviewer quorum flips it to SIGNED_OFF, and the submitter is notified in both directions. It also documents the authorization model and the exact error code returned when nothing is awaiting review.

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

Conciseness5/5

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

One dense paragraph that front-loads the action and decision values, then layers state outcomes, permissions, and error behavior in descending order of importance. Nothing is padded and no sentence is redundant.

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

Completeness4/5

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

With no output schema, the description handles return values economically by saying it 'Returns the record get_closeout_status returns,' which is enough for an agent to know the shape. State transitions, permissions, and the failure mode are all covered; only the ambiguity versus submit_closeout_signoff leaves a 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 description coverage is only 33% (only comment is documented), so the description must compensate and does: it clarifies the SIGNED_OFF vs CHANGES_REQUESTED semantics and confirms the comment is required specifically for CHANGES_REQUESTED. projectId is left entirely unexplained, though its meaning is inferable from the many project-scoped siblings.

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 its precondition ('Record the caller's decision on a closeout that is IN_REVIEW') and names the two allowed decision values, which is well beyond a tautology. However, it never distinguishes itself from the close sibling submit_closeout_signoff, so an agent choosing between the two must guess from 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 Guidelines4/5

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

Gives real usage conditions: who is allowed to decide (designated reviewer, project Owner or Manager), the quorum caveat that Owner/Manager decisions never count unless named, and the refusal case CLOSEOUT_NOT_IN_REVIEW. No explicit statement of when to use this instead of submit_closeout_signoff or get_closeout_status, 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.

decide_workflow_approvalAInspect

Decide a PENDING workflow approval (APPROVED or REJECTED) with an optional note. Caller must be the assigned approver. Duplicate decisions return CONFLICT. The workflow engine picks the decision up on its next tick. Plan gate: automations (PRO+).

NameRequiredDescriptionDefault
noteNo
decisionYes
approvalIdYes

TDQS

A4.4/5.0
Behavior5/5

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

Goes well beyond the annotations: it discloses the authorization requirement (must be the assigned approver), the duplicate-decision error behavior (CONFLICT, consistent with idempotentHint=false), the asynchronous processing model (engine picks it up on next tick, so the effect is not immediate), and commercial gating (PRO+ plan). These are exactly the traits an agent needs and 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?

Five short clauses, each carrying distinct information (action, actor requirement, error case, async latency, billing gate), with the core operation front-loaded. No filler.

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

Completeness4/5

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

With no output schema, the description covers the important post-call semantics (conflict on duplicates, deferred pickup by the engine). The main remaining gap is how to obtain a valid approvalId, which would complete the picture for a decision 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 0%, so the description must carry the load. It clarifies that note is optional and restates the decision enum values, but leaves approvalId entirely unexplained (where to obtain it, format). Partial compensation 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 (decide) and resource (workflow approval), pins the allowed decision values, and constrains the operation to PENDING approvals. An agent can distinguish this mutation from the sibling read tool list_workflow_approvals 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?

Clearly states the precondition that selects this tool ('Caller must be the assigned approver') and the plan gate (automations PRO+), plus the conflict condition on repeat calls. It does not explicitly route the agent to list_workflow_approvals to discover the approvalId first, but the usage context is otherwise clear.

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

delete_documentA
DestructiveIdempotent
Inspect

Delete a workspace document. Recoverable from the recycle bin (a manager can restore it). This is a GOVERNED destructive operation: an org admin must enable it in Settings > Agents > Agent Policies (Governed operations) before a connected agent can run it; otherwise it is denied. You also need write access to the document.

NameRequiredDescriptionDefault
documentIdYesWorkspaceDocument id 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=true, yet the description adds substantial context beyond them: the action is recoverable via the recycle bin with manager restore, and it is a governed operation blocked unless an admin enables the policy. This is exactly the kind of prerequisite/aftermath detail 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 sentences, front-loaded with the action, then recoverability, then the governance gate. Every sentence earns its place with no redundancy.

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

Completeness5/5

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

For a single-param delete with no output schema, the description covers prerequisites (admin policy, write access), denial behavior, and recoverability, which is everything an agent needs to invoke it correctly.

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

Parameters3/5

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

There is a single parameter with 100% schema coverage (documentId already described as the WorkspaceDocument id to delete), so the schema does the heavy lifting. The description adds no syntax or format detail beyond what the schema provides, 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 ('Delete a workspace document'), which cleanly distinguishes it from siblings like delete_project, delete_task, and delete_workspace_table. The scope is unambiguous and immediately actionable.

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: an org admin must enable the governed operation and the caller needs write access, otherwise the call is denied. It does not name alternatives or contrasts (e.g., archive vs delete, or using list_recycle_bin), but the gating context is explicit.

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

delete_projectA
DestructiveIdempotent
Inspect

Soft-delete one project. The project (and its tasks via cascade) is moved to the recycle bin, restorable for the org's data-retention window. Caller must have project.delete on the project (project OWNER by default).

NameRequiredDescriptionDefault
projectIdYesProject to delete.

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds material context beyond them: this is a soft-delete, the project's tasks cascade, everything lands in the recycle bin, and it remains restorable for the org's data-retention window. It also states the authorization requirement (project.delete, OWNER by default), which annotations do not convey.

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

Conciseness5/5

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

Three sentences, zero waste, front-loaded with the action and its soft-delete nature, then the cascade/restore behavior, then the permission requirement. Every sentence earns its place.

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

Completeness5/5

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

No output schema exists, yet the description explains the side effects (cascade to tasks, recycle bin, retention window) and the auth prerequisite, so an agent knows both the consequence and the gate before calling. Nothing essential is missing for a single-parameter destructive 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 the single projectId parameter is documented in the schema itself. The description says 'one project' but adds no format, ID-source, or identifier-syntax 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.

Purpose5/5

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

States a specific verb and scope: 'Soft-delete one project.' The word 'soft' distinguishes it from a hard delete and the cascade note clarifies exactly what gets affected, so an agent can separate it from archive_project or move_project 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 Guidelines3/5

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

The description explains the restorability window and the required permission (project.delete, OWNER by default), which is useful context for deciding whether to act. However, it never names an alternative or states when this should be chosen over siblings like archive_project or move_project, leaving the routing implicit.

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

delete_taskA
DestructiveIdempotent
Inspect

Soft-delete one task. The task AND its subtasks are moved to the recycle bin (restorable via the Recycle Bin UI for the org's data-retention window, with subtasks, attachments, comments and dependencies intact). Caller must have task.delete on the project. Returns the recycle-bin entry id so a human can restore it manually.

NameRequiredDescriptionDefault
taskIdYesTask to delete.

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true and idempotentHint=true, but the description goes well beyond them: it discloses that this is a soft-delete, that subtasks/attachments/comments/dependencies are preserved intact, the restore path (Recycle Bin UI), the data-retention window, the required permission, and the returned recycle-bin entry id. This is unusually rich behavioral context.

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

Conciseness5/5

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

Four tight sentences, front-loaded with the core action, then scope, then recoverability, then permission and return value. No redundancy and nothing 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 single-parameter destructive tool with no output schema, the description covers everything an agent needs: mutation semantics, cascade behavior, reversibility/retention, permission requirement, and the return value. 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?

Schema description coverage is 100% for the single taskId parameter, so the schema already documents it. The description adds only the cascade scope ('one task... AND its subtasks') rather than syntax or format detail, so the baseline of 3 applies.

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

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 one task') and immediately clarifies scope by noting it cascades to subtasks. This distinguishes it from sibling destructive tools like delete_project and delete_document without the agent 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 Guidelines3/5

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

The description implies usage context (recoverable soft-delete vs permanent deletion) and states a prerequisite ('Caller must have task.delete on the project'), but it never names an alternative tool or specifies when-not to use it. Usage is implied 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.

delete_workspace_tableA
DestructiveIdempotent
Inspect

Delete a workspace table (a "list") and its rows. Recoverable from the recycle bin (a manager can restore it). This is a GOVERNED destructive operation: an org admin must enable it in Settings > Agents > Agent Policies (Governed operations) before a connected agent can run it; otherwise it is denied. You also need write access to the list.

NameRequiredDescriptionDefault
tableIdYesThe workspace table (list) id 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, idempotentHint=true, and readOnlyHint=false, but the description goes well beyond them: it discloses recoverability via the recycle bin (a manager can restore it), the governed-operation gate that can deny execution, and the write-access prerequisite. Those are exactly the behavioral facts an agent cannot infer from annotations alone.

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

Conciseness5/5

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

Three short sentences, front-loaded with the action and scope, then recoverability, then the governance/access gate. No filler and no repetition of 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 single-parameter destructive mutation with no output schema, the description covers the full decision surface: what is destroyed (table plus rows), reversibility, the governance gate, and permission requirements. Nothing an agent needs before invoking it is missing.

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

Parameters3/5

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

Schema description coverage is 100% and the single tableId parameter is documented in the schema as "The workspace table (list) id to delete." The description reinforces the list/table terminology but adds no format or acquisition guidance, so the baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb and resource — "Delete a workspace table (a \"list\") and its rows" — with the destructive scope made explicit (rows included). This clearly distinguishes it from siblings like delete_task, delete_document, delete_project, and from the non-destructive create/update workspace-table tools.

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

Usage Guidelines4/5

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

Gives strong contextual guidance: this is a governed operation requiring an org admin to enable it in Settings > Agents > Agent Policies, otherwise it is denied, and the caller also needs write access to the list. It does not name a preferred alternative (e.g., an archive/soft-delete or recycle-bin listing tool such as list_recycle_bin), so exclusions remain implicit.

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

describe_capabilitiesA
Read-onlyIdempotent
Inspect

Return the live MCP tool surface for the calling org. Each row: name, description, kind (READ/MUTATION), category (coarse domain bucket, e.g. tasks / governance / microsoft), featureKey (plan gate), permissionKey, monthlyCap (-1 = unlimited), mcpExposed (true if reachable from MCP), planSatisfied (caller's plan grants the feature gate), and permissionSatisfied (caller's role grants the permission: true/false for org-level keys, null for project-level keys that depend on your role in a specific project). Together they let you predict a 402/403 before calling. IMPORTANT , this lists the ENTIRE catalog, not the tools you currently hold. Read availability on each row: "available" means call it directly; "loadable" means it exists and you are permitted to use it but must call load_tools with that row's category FIRST. The availableNow and loadable counts say how many of each. The distinction matters for reporting reach: availableNow is what is callable right now, whereas totalTools counts the whole catalog including rows that are gated or not yet loaded. Optional filters: kind=READ|MUTATION, mcpOnly=true, availableOnly=true. Pairs with whoami, which supplies the identity and plan context these gates resolve against. Source-of-truth is the registered tool catalog + MCP_EXPOSED_TOOLS, not training data.

NameRequiredDescriptionDefault
kindNoFilter to one kind. Omit for all.
mcpOnlyNoDefault false. When true, only return tools reachable from MCP.
availableOnlyNoDefault false. When true, only return tools the caller's plan currently enables.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description adds meaning beyond them: the row schema, the available-vs-loadable gating semantics, and that the source of truth is the registered catalog + MCP_EXPOSED_TOOLS rather than training data. This is exactly the extra context that helps an agent trust and interpret the result.

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

Conciseness4/5

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

Front-loaded with the core purpose and row shape before the caveats, and almost every sentence earns its place. It is dense and long for a read tool, with some overlap between the availability explanation and the filters paragraph, so it falls just short of fully tight.

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 carries the full burden of describing the return: it enumerates every row field and explains the enum values and the -1/null sentinels. An agent can interpret the response and the gating model without further help.

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 roughly mirrors the filters (kind=READ|MUTATION, mcpOnly, availableOnly) but adds the useful nuance that availableOnly means the caller's plan currently enables the tool, tying the flag to the plan-gate concept.

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: 'Return the live MCP tool surface for the calling org.' It explicitly scopes to the org's catalog rather than the caller's held tools, which distinguishes it from nearby siblings like whoami (identity) and get_plan_features (plan data).

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

Usage Guidelines5/5

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

Gives explicit when-to-use ('Together they let you predict a 402/403'), the action required for a state ('loadable' rows require calling load_tools with that category first), and names a companion tool ('Pairs with whoami'). It also warns about the reporting distinction between availableNow and totalTools.

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

describe_schemaA
Read-onlyIdempotent
Inspect

Return the canonical Onplana entity schema. Three call modes: (1) no args → list every known entity name; (2) entity= → full descriptor (fields with type/required/default/enumValues/maxLength/isFK/isAutoManaged/description, relations, state machines, validation rules, writeSurfaces); (3) includeAll=true → bulk payload of every descriptor. It is the only source of field shapes when planning against an empty org (no sample row to introspect via get_X), and of the cross-field rules a write must satisfy. Pass projectId with entity=Task (or Project/ProjectProposal) to also get that project's live custom fields merged in, the effective create-time field set in one call. Source = hand-curated lib/schemaCatalog.ts mirroring prisma/schema.prisma + tool validate() rules.

NameRequiredDescriptionDefault
entityNoOptional entity name. Case-sensitive (e.g. "Task", "ProjectProposal"). Omit to list all entities.
projectIdNoOptional. With entity=Task/Project/ProjectProposal, merges this project's custom fields (org-wide + project-scoped) into the response.
includeAllNoDefault false. When true and entity is omitted, returns the full catalog (heavy).

TDQS

A4.3/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 useful behavior beyond that, disclosing the contents of a descriptor, the heavy cost of includeAll, the custom-field merge semantics with projectId, and the fact that the catalog is hand-curated from lib/schemaCatalog.ts mirroring prisma/schema.prisma plus validate() rules. It does not describe pagination or exact payload size, keeping it just under full credit.

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 three modes are front-loaded and numbered, and each subsequent sentence carries distinct information (empty-org rationale, projectId merge, curated source). It is dense and runs long, but no sentence is redundant, so it stays efficient without being wasteful.

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

Completeness4/5

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

There is no output schema, so the description must characterize returns; it does so by listing the descriptor contents (type/required/default/enumValues/isFK/isAutoManaged, relations, state machines, validation rules, writeSurfaces). Combined with the three-mode explanation and annotations, an agent has enough to call it correctly, though the exact top-level response envelope is not spelled 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?

With 100% schema description coverage the baseline is 3, but the description goes further by tying parameters together: projectId is meaningful only with entity=Task/Project/ProjectProposal and yields a merged, effective create-time field set, and includeAll is a bulk payload whose cost is called out as heavy. It also reinforces case-sensitivity of entity and the no-arg listing mode, adding coordination semantics beyond each field's standalone doc.

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 canonical Onplana entity schema') and then enumerates the three distinct call modes, so an agent can distinguish the list-entities, single-descriptor, and bulk behaviors without opening the schema. It is clearly separable from data-fetching siblings like get_task or list_projects because it returns schema metadata, not records.

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

Usage Guidelines4/5

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

Gives clear context for when to reach for it: 'the only source of field shapes when planning against an empty org (no sample row to introspect via get_X)', which implies the contrast with get_X tools. It does not name an explicit alternative such as describe_capabilities or state when not to use it, so it falls 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.

designate_gate_reviewerA
Idempotent
Inspect

Designate a user as a gate reviewer for a specific governance gate. Requires org.governance.manage. Idempotent. User must be an active org member. Feature: governance (ENTERPRISE+).

NameRequiredDescriptionDefault
gateYes
userIdYesOrg member ID to designate.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=true), so the bar is lower; the description still adds permission requirement, org-membership constraint, and license tier. 'Idempotent' merely repeats the annotation, so not a full 5.

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

Conciseness4/5

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

Four short sentences, front-loaded with the action, then constraints. No filler; a bit telegraphic but every clause carries information.

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

Completeness4/5

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

For a write tool with no output schema, it covers the key auth/membership/tier/idempotency facts an agent needs before invoking. Missing only the semantics of the gate enum values.

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%: userId is described in the schema, but the gate enum values (PROPOSAL_REVIEW, BUSINESS_CASE_REVIEW, PLAN_REVIEW) are undocumented in both schema and description. The description only implies the gate via 'specific governance gate'. 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: 'Designate a user as a gate reviewer for a specific governance gate.' An agent can distinguish it from list_gate_reviewers/list_gate_approvals, 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 Guidelines4/5

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

Gives concrete preconditions — requires org.governance.manage, user must be an active org member, ENTERPRISE+ governance feature. It states when the tool is callable but offers no comparison to alternatives or exclusion cases.

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

design_page_draftA
DestructiveIdempotent
Inspect

Design or edit a web part page with AI (PRO+ feature). Call with { pageId, prompt } to GENERATE a proposed page design from a natural-language instruction, the tool returns the proposed Puck Data content plus a diff (removed parts + added external links) WITHOUT saving it. Then call with { pageId, draft, expectedUpdateRevision } to APPLY that reviewed draft; if the diff removes parts or adds non-first-party external links the apply is REFUSED with requiresConfirmation until you re-send it with acknowledgeChanges: true. A "Before AI edit" version is snapshotted before the write. Requires contribute access. Publish separately with publish_page.

NameRequiredDescriptionDefault
draftNoThe reviewed proposed content to APPLY (from a prior generate call). Omit when generating.
pageIdYesPage id (create the page first with create_page for a brand-new page).
promptNoNatural-language design instruction (required to GENERATE). Omit when applying a draft.
promptTextNoOptional: the original prompt, so the apply-time link allowlist matches the preview.
acknowledgeChangesNoSet true to apply despite removed parts / added external links (after reviewing the diff).
expectedUpdateRevisionNoRequired when applying a draft: the updateRevision from get_page.

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the annotations: it discloses that generate persists nothing, that apply is gated behind requiresConfirmation when the diff is risky, that a 'Before AI edit' snapshot is taken, and that contribute access is required. These are exactly the write-safety and side-effect facts an agent needs for a destructive:true tool.

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

Conciseness4/5

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

Front-loaded with purpose, then the generate path, then the apply path and its guardrails. It is dense and slightly overlong given the schema already documents several fields, but every clause carries operative information and 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?

For a complex two-phase, 6-parameter tool with no output schema, the description still covers the return of the generate phase (proposed Puck Data plus a diff of removed parts and added external links), the refusal behavior, the snapshot, permissions, and the separate publish step. An agent can invoke it correctly end-to-end.

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 the per-field burden. The description still adds cross-field meaning the schema can't express well: which parameter combination selects generate vs. apply, and how expectedUpdateRevision and acknowledgeChanges participate in the refusal flow. No contradiction with annotations.

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 ('Design or edit a web part page with AI') and immediately frames the two-mode contract: generate a proposed design vs. apply a reviewed draft. It also names adjacent siblings (create_page, publish_page) so an agent can place it precisely in the page workflow.

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

Usage Guidelines5/5

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

Gives explicit when-to-use for each call shape ({ pageId, prompt } to generate, { pageId, draft, expectedUpdateRevision } to apply), states the condition under which apply is refused (removed parts / added external links) and the escape hatch (acknowledgeChanges: true), and routes publishing to publish_page. Nothing about invocation sequencing 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.

design_workflow_draftA
DestructiveIdempotent
Inspect

Design a workflow graph with AI for an existing workflow (PRO and above). Called with a prompt, it returns a proposed graph, a plain-language readback of what that graph would do, and a diff against the current one, without saving anything. Called with a graph from a previous reply, it saves that graph, and saving always requires acknowledgeChanges, so a person sees the readback before a workflow changes. Without it the reply is a refusal carrying that readback. It edits an existing workflow and cannot create one, and it cannot activate a workflow: a saved draft stays in whatever state the workflow was already in. Unresolved references, such as an approver who is not in the workspace, are listed on the draft and prevent it being saved until a person chooses them. A draft is built for the trigger the workflow already has, returned as trigger with triggerProposed false; it never changes a workflow's trigger or name.

NameRequiredDescriptionDefault
graphNoA graph from a previous generate reply, to SAVE. Omit when generating.
promptNoWhat the workflow should do, in plain words. Used to GENERATE; omit when saving a graph.
workflowIdYesThe workflow to design for. Get one from list_workflows.
acknowledgeChangesNoSet true to save a graph that removes a step or adds one reaching outside Onplana, after reading the diff.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only give destructiveHint/readOnlyHint/idempotentHint; the description adds far more: the dry-run generate path returns graph + readback + diff and saves nothing, saving always requires acknowledgeChanges so a human reviews the diff, a missing acknowledgement produces a refusal carrying the readback, unresolved references (e.g. an approver not in the workspace) block saving until chosen, and the trigger/name are never altered. This is exactly the behavioral detail annotations cannot convey.

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

Conciseness4/5

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

The generate-vs-save distinction is front-loaded and nearly every clause carries non-redundant information (guardrails, refusal behavior, trigger immutability). It is a dense single block of prose rather than a structured list, which makes the mode-switching and guardrail clauses slightly harder to scan, but there is little 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?

With no output schema, the description still names the return payloads (proposed graph, plain-language readback, diff), the save/refusal outcomes, and the blocking failure mode (unresolved references). For a mutable, dual-mode tool with a nested graph object, nothing an agent needs to call it safely is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description meaningfully reinforces semantics: 'graph' is a save payload from a previous reply (omit when generating), 'prompt' drives generation (omit when saving), and acknowledgeChanges is mandatory for saves that remove a step or reach outside Onplana. It adds the mutual-exclusion and the review prerequisite beyond the schema's per-parameter text.

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

Purpose5/5

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

States a specific verb and resource ('Design a workflow graph with AI for an existing workflow') plus scope constraints, and contrasts itself with adjacent concepts by declaring it edits an existing workflow and cannot create or activate one. An agent can distinguish it from get_workflow, duplicate_workflow, list_workflows and test_run_workflow without opening any schema.

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

Usage Guidelines5/5

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

Explicitly routes the two usage modes: called with 'prompt' it generates a preview (writes nothing), called with 'graph' from a previous reply it saves. It also states the when-not conditions (cannot create a workflow, cannot activate one, saved draft stays in whatever state the workflow was already in), so the agent knows the boundaries before calling.

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

detect_evm_data_sourceA
Read-onlyIdempotent
Inspect

Probe the cost-attribution path EVM will use for a project. Returns "imported" when >=80% non-milestone tasks have plannedCost (MS Project import), "rate-cards" when at least one active rate card exists, "none" otherwise. Cheap pre-flight before calling calculate_evm so you can warn the user when fidelity is low.

NameRequiredDescriptionDefault
projectIdYes

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 safety is covered; the description adds genuinely new behavior — the heuristic thresholds (>=80% non-milestone tasks with plannedCost, active rate card exists) and the cost/fidelity profile. It doesn't mention permissions or failure behavior, keeping it short of a 5.

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

Conciseness5/5

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

Three tight sentences: purpose first, then exact return semantics, then usage routing. Every sentence carries information an agent needs to call and interpret the tool.

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

Completeness5/5

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

There is no output schema, yet the description fully specifies the three possible return values and the conditions producing each, plus when to call it. Nothing needed for correct invocation or interpretation 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 0% and the single projectId parameter is never named or described, though 'for a project' weakly implies it. With one required param and no format/ID-type guidance, the description only marginally compensates.

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 (probe) and resource (cost-attribution path EVM will use for a project), and enumerates its return values with thresholds. It is clearly distinguishable from calculate_evm and other EVM siblings because it is a diagnostic rather than a computation.

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 frames itself as a 'cheap pre-flight before calling calculate_evm' and gives the reason (warn the user when fidelity is low), naming the alternative tool and the condition that selects it.

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

dismiss_all_read_notificationsA
DestructiveIdempotent
Inspect

Delete every already-read notification for the calling user. Pair with mark_all_notifications_read to clear the inbox entirely.

NameRequiredDescriptionDefault

No parameters

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, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered structurally. The description adds genuine scope context beyond the annotations: it deletes only already-read items and only for the calling user. It does not address irreversibility or return, but it usefully narrows what gets destroyed.

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 core action is front-loaded and the workflow pairing follows. Every sentence 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?

For a parameterless destructive bulk operation with annotations covering safety and idempotency, and no output schema needed, the description supplies the action, scope, and a companion workflow. Missing only an explicit note on irreversibility/undo, which is minor given destructiveHint is already set.

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

Parameters4/5

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

The tool takes zero parameters, so per the rubric the baseline is 4. There is nothing for the description to disambiguate, and it correctly omits any parameter discussion.

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 with scope: 'Delete every already-read notification.' The 'every already-read' wording implies bulk deletion for the calling user, distinguishing it in spirit from the singular dismiss_notification, though it never names that sibling explicitly. Clear and specific, but no 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 Guidelines4/5

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

'Pair with mark_all_notifications_read to clear the inbox entirely' gives concrete workflow context for when to reach for this tool. It stops short of naming exclusions or the single-item alternative (dismiss_notification), so it is clear context without 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.

dismiss_notificationA
DestructiveIdempotent
Inspect

Permanently delete one notification (removes it from the inbox). Caller must own the notification.

NameRequiredDescriptionDefault
notificationIdYesId of the notification to dismiss.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered. The description earns credit beyond that by spelling out permanence and the ownership/authorization precondition, which the annotations do not convey.

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

Conciseness5/5

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

One tight sentence with the destructive effect front-loaded and the ownership constraint appended. No filler; every clause adds information.

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

Completeness4/5

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

For a one-parameter mutation with no output schema, the description covers permanence, scope, and the ownership requirement. It omits only edge behavior such as what happens when the caller does not own the notification, which is minor given annotation coverage.

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

Parameters3/5

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

Schema description coverage is 100% and there is only one parameter, so the schema already documents notificationId. The description adds nothing about id format or lookup beyond the singular scope, making this a baseline 3.

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

Purpose5/5

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

States a specific verb (delete/dismiss), the exact scope ('one notification'), and the effect ('removes it from the inbox'). The singular scope cleanly distinguishes it from sibling dismiss_all_read_notifications.

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 precondition ('Caller must own the notification') that would otherwise be inferred, but gives no explicit when-to-use routing against alternatives such as mark_notification_read or dismiss_all_read_notifications. Usage is implied by the scope rather than stated.

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

dismiss_riskA
DestructiveIdempotent
Inspect

Mark a ProjectRisk as dismissed, with why: reason is MITIGATED, NOT_RELEVANT, DUPLICATE or OTHER (OTHER needs a note), and note is free text. Idempotent: dismissing an already-dismissed risk returns the existing row without re-writing. Also records implicit "DISMISSED" feedback against the risk category, which downweights that category in future detector runs. A person can restore a dismissed risk from the Risks tab.

NameRequiredDescriptionDefault
noteNoWhy, in a few words. Required when reason is OTHER.
reasonNoWhy it is dismissed.
riskIdYesId of the ProjectRisk to dismiss.

TDQS

A4.1/5.0
Behavior4/5

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

Goes well beyond the annotations by disclosing the side effect that a DISMISSED feedback signal is recorded against the risk category and downweights future detector runs, plus the precise idempotency behavior (returns existing row without re-writing) and the human restore path. Given the annotations already declare destructiveHint/idempotentHint, this is a solid additive disclosure, though it says nothing about permissions or the shape of the returned row.

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 resource, then reasons, then idempotency, then side effect. Three sentences carry a lot of information with little waste, though the second sentence is dense enough (parenthetical reason list + note rule) that it could be split for faster scanning.

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

Completeness4/5

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

For a mutating, non-read-only operation with no output schema, the description covers what changes, idempotency, side effects and reversibility. The main remaining gap is what the response looks like and any authorization requirements, but nothing critical to correct invocation is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so riskId, reason and note are already documented at the field level. The description adds the conditional rule that OTHER needs a note and that note is free text, but that constraint is largely mirrored in the schema's own note description, so it does not substantially exceed the structured data.

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 ('Mark ... as dismissed') against a specific resource ('ProjectRisk'), and immediately enumerates the reason vocabulary. No sibling tool in the large list performs dismissal of a risk, so the agent can distinguish this from create_risk/list_risks/analyze_project_risks 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 four reason enums define the conditions under which this tool is the right call (mitigated, not relevant, duplicate, other-with-note), which is clear usage context. It does not name an alternative tool for cases where a risk should be resolved or escalated instead, so no explicit exclusions or sibling routing are provided.

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

draft_documentAInspect

Draft a markdown document directly into a project document library as a first-class file (mimeType=text/markdown). The operator opens it from the Documents tab and reads the styled output. Use for status reports, summaries, and other prose deliverables the agent wants the team to review in context. libraryId must reference an existing library; create one first via create_library if needed. contentMarkdown is capped at 100KB UTF-8; split into multiple documents or take the file-upload route for anything larger. Supported markdown features: headings (h1-h6), bold, italic, inline code, bullet + numbered lists (including multi-level nesting), paragraphs, links and auto-linked URLs, GFM pipe tables, blockquotes, fenced code blocks, and thematic breaks (---). NOT supported: embedded images (alt degrades to its alt text), footnotes, and setext (underline) headings. Requires project.content.create (CONTRIBUTOR+; Viewers are read-only).

NameRequiredDescriptionDefault
titleYes1..200 chars. Becomes the document name + filename stem.
libraryIdYes
contentMarkdownYesUTF-8 markdown, max 100KB.

TDQS

A4.5/5.0
Behavior5/5

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

Goes well beyond the annotations (which only declare readOnlyHint=false, idempotentHint=false, destructiveHint=false, openWorldHint=false). It discloses the required permission (project.content.create, CONTRIBUTOR+, Viewers read-only), the 100KB UTF-8 cap, the prerequisite that libraryId must reference an existing library, and a detailed supported/unsupported markdown feature list.

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 use case before diving into prerequisites, limits, and the markdown feature list. The feature enumeration is long but each item prevents a real failure mode (e.g. images degrading to alt text), so it mostly earns its place, though it could be tightened.

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

Completeness4/5

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

With no output schema, the description covers the important operational facts: permissions, size limit, prerequisite library, and content format constraints, plus what the operator does with the result. It omits any mention of what the call returns (e.g. document id), which an agent invoking this might benefit from knowing.

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%, so the schema already documents title length and the contentMarkdown 100KB cap. The description compensates by adding the libraryId existence requirement and the create_library prerequisite, plus rich content-format semantics (supported markdown features and degradations). It does not add anything about the title parameter beyond the schema.

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

Purpose5/5

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

States a specific verb and resource ('Draft a markdown document directly into a project document library as a first-class file, mimeType=text/markdown') and clarifies the intended use case (status reports, summaries, prose deliverables). It differentiates from the file-upload sibling by naming the alternative route for oversized content.

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 ('Use for status reports, summaries, and other prose deliverables the team reviews in context') and names alternatives: create_library when the library is missing, and the file-upload route for content over 100KB. It does not explicitly contrast with other document-creation siblings like create_page, create_wiki_page, or create_office_document, leaving some routing ambiguity.

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

duplicate_projectAInspect

Make a copy of an existing project as a new project, to run the same work again: "copy last quarter's launch project", "duplicate this project for the new office", "start again from the Q3 plan". The copy carries the project's settings and description, tasks at every level with their order, priorities, estimates, durations, constraints and recurrence, the dependencies between its own tasks, epics, sprints, milestones, tags and org-wide custom field values. With people (default true) it also carries the project members, assignees and task collaborators; the source's owner joins as a manager. It resets every task to To do with no progress, actuals or completion, every milestone and sprint to not done and the project to Planning, and the caller becomes the owner. With startDate every date moves by the same whole days; without it the dates stay as they were. It leaves behind comments, attachments and documents, risks, issues, baselines, time, expenses and revenue, portfolio links, deals, readiness and closeout records, workspace lists and pages, sharing grants, links to tasks in other projects, fields scoped to the source project and every sync the source has. The source project is not changed. Unlike save_project_as_template, which keeps two levels of tasks as date offsets for reuse across many projects and needs the templates feature, this keeps the whole schedule and makes one new project now. A project above 5000 tasks or one that holds a Maker app is refused. The new project counts toward the plan's project limit. Undo deletes the copy. The result includes url, a direct link to the new project in Onplana, which the user has no other way to find from another app.

NameRequiredDescriptionDefault
nameNoName of the new project, 1-200 chars. Default: the source's name followed by " (copy)".
peopleNoCarry the members, assignees and task collaborators. Default true; false leaves every task unassigned and the caller the only member.
projectIdYesThe project to copy.
startDateNoOptional new start date (YYYY-MM-DD). Every date in the copy moves by the same whole days. Omitted: dates unchanged.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare the safety profile (not read-only, not idempotent, not destructive); the description goes far beyond them by enumerating exactly what is carried over (tasks, dependencies, epics, sprints, milestones, tags, custom fields), what is reset (all tasks to To do, project to Planning, caller becomes owner), and what is deliberately left behind (comments, attachments, risks, baselines, sharing grants, syncs). It also discloses ownership effects and the returned `url`.

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

Conciseness4/5

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

Purpose and examples are front-loaded, and the dense enumeration of copied vs. left-behind data is information-dense rather than padded. It is long and could be split into bullets, but nearly every clause carries a distinct behavioral fact.

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

Completeness5/5

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

For a non-idempotent mutation with no output schema, the description covers side effects, limits, ownership changes, reversibility (Undo), and the shape of the result (`url`). 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.

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3, but the description adds behavioral meaning the schema lacks: `people=true` makes the source's owner join as a manager, and `startDate` shifts every date by the same whole days while omitting it leaves dates unchanged. These consequences go beyond the schema's terse field notes.

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 ('Make a copy of an existing project as a new project') and immediately differentiates itself from the nearest sibling, save_project_as_template, by contrasting what each preserves. An agent can select between 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?

Gives concrete usage scenarios ('copy last quarter's launch project'), an explicit when-to-use-this-instead-of-save_project_as_template rule, and refusal conditions (5000+ tasks, Maker app). It also notes the copy counts toward the plan's project limit and that Undo deletes the copy, so the agent knows the trade-offs.

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

duplicate_workflowAInspect

Clone a workflow with fresh step IDs. PRO+ feature (automations). The copy starts inactive (isActive=false) and is named " (Copy)". Returns the new workflow's id + name. Use this to template-then-tweak an existing workflow without disturbing the original. MUTATION: writes a new Workflow row. Permission: automation.manage on the workflow's project (or org MANAGER+ for org-wide workflows).

NameRequiredDescriptionDefault
workflowIdYes

TDQS

A4.4/5.0
Behavior5/5

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

Goes well beyond the annotations by disclosing the PRO+ tier requirement, that the copy lands inactive (isActive=false), the derived naming pattern, the mutation nature ('writes a new Workflow row'), and the exact permission needed (automation.manage or org MANAGER+). None of that is recoverable 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.

Conciseness4/5

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

Dense but front-loaded: cloning behavior first, then side effects, then return value, then permission. Every sentence carries distinct information, though the final permission/scope clause makes it slightly cluttered for a one-parameter tool.

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

Completeness5/5

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

No output schema exists, yet the description states the return value (new workflow id + name). Mutation semantics, side effects, activation state, and authorization requirements are all covered, so an agent has everything needed 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 coverage is 0% and the single workflowId parameter is undocumented in both schema and description. The description only indirectly implies the parameter through 'the workflow's project' when describing permissions, so it adds marginal meaning. Baseline would be 4 only if there were zero parameters.

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

Purpose5/5

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

States a specific verb and resource ('Clone a workflow') plus the key differentiator 'with fresh step IDs', which separates it from get_workflow, list_workflows, and design_workflow_draft. 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?

Explicitly gives the intent-based trigger: 'Use this to template-then-tweak an existing workflow without disturbing the original.' It does not name alternatives or state when NOT to use it (e.g., vs. save_project_as_template or instantiate_template), 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.

edit_commentA
DestructiveIdempotent
Inspect

Edit a comment you authored. Only works on comments the calling agent created. Content must be 1-10000 chars. Use this to correct a previously posted status note or fix a typo.

NameRequiredDescriptionDefault
contentYesReplacement content, 1-10000 chars. Plain text is formatted as in create_comment: blank lines separate paragraphs, "- " and "1. " lines become lists.
commentIdYesId of the comment to edit.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds the ownership constraint ("only works on comments the calling agent created") and the 1-10000 char bound, both of which are behavioral facts not present in the annotations. It does not say what happens to the prior content or whether a failed ownership check errors, so it is 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?

Three short sentences, zero filler, with the strongest constraint (you can only edit your own comments) placed early. Every sentence adds a distinct fact: capability, restriction, validation, and use case.

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

Completeness4/5

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

For a two-parameter mutation with no output schema, the description covers capability, ownership restriction, length validation, and intent. It omits error behavior for non-owned comments and whether the edit supersedes prior content entirely, which are minor given idempotent/destructive annotations already signal overwrite semantics.

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

Parameters3/5

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

Schema description coverage is 100% and both parameters are fully documented there, including the formatting rules, so the schema carries the load. The description only repeats the same 1-10000 char bound and adds no new parameter-level meaning, which is the expected 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+resource ("Edit a comment") and immediately scopes it to comments the calling agent authored, which separates it from create_comment and list_comments. An agent knows exactly which object class is touched 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 positive usage contexts ("correct a previously posted status note or fix a typo"), which is clear guidance on when to reach for it. It stops short of naming an alternative for the excluded case (someone else's comment, or a comment that shouldn't be edited at all), so it is strong but not complete.

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

end_sessionA
Idempotent
Inspect

Signal that this agent session is complete. Flips the underlying AiConversation agentStatus to ENDED so the human-side Settings → Agents UI shows the session as terminated. Optional reason string (1-500 chars) is captured for audit. Idempotent: calling again returns the existing terminal status without changing it. Honest agents call this when they've finished their assigned work or are about to disconnect; humans can also revoke the PAT, which is more forceful but achieves the same lifecycle outcome. Any task leases this session still holds are handed back, so the tasks become available to other agents immediately rather than after the lease expires.

NameRequiredDescriptionDefault
reasonNoOptional short rationale for ending. 1-500 chars.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations cover idempotency and non-destructiveness, but the description adds substantial context beyond them: the exact state flip, the audit capture of the reason, and crucially that held task leases are handed back so tasks become available immediately. That lease-release side effect is a meaningful behavioral trait not encoded in any structured field.

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

Conciseness4/5

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

Purpose is front-loaded and every sentence carries information (state flip, reason, idempotency, alternative, lease release). It runs five sentences for a one-parameter tool, which is slightly more than strictly necessary, but there is little waste.

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

Completeness5/5

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

With no output schema, the description still tells the agent what happens on repeat calls, what happens to held leases, and the alternative mechanism, so 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.

Parameters4/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 adds that the optional reason is 'captured for audit', which gives the parameter a purpose beyond its schema definition ('Optional short rationale for ending. 1-500 chars.'). Modest but real added value.

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

Purpose5/5

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

States a specific verb and resource ('Signal that this agent session is complete') and then concretizes the effect ('Flips the underlying AiConversation agentStatus to ENDED'). An agent can immediately distinguish this from lifecycle siblings like claim_task or release_task.

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 when to call it ('when they've finished their assigned work or are about to disconnect') and contrasts an alternative ('humans can also revoke the PAT, which is more forceful but achieves the same lifecycle outcome'). This is true when/when-not/alternative guidance.

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

evidence_exportA
Read-onlyIdempotent
Inspect

ENTERPRISE+ compliance evidence export over a date window (≤90 days). Returns per-week timesheet compliance + the TIMESHEET_* AuditLog event stream for the period, plus summary totals. Mirrors GET /api/compliance/evidence used by SOX/HIPAA shops to feed external GRC tools. Permission: org.compliance.manage (default OWNER+/ADMIN+). Inputs: from and to as YYYY-MM-DD strings. CSV format is HTTP-only; this tool returns JSON.

NameRequiredDescriptionDefault
toYesEnd of the export window, YYYY-MM-DD. Must be on or after `from`. Span ≤ 90 days.
fromYesStart of the export window, YYYY-MM-DD.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower, and the description still adds real behavior: the required permission and default role floor, the 90-day window cap, the exact return composition, and the note that CSV is HTTP-only while this tool returns JSON. It does not discuss pagination or volume behavior for a potentially large event stream.

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 dense sentences, front-loaded with tier and purpose, and each carries distinct information (output shape, endpoint, permission, format caveat). Slightly packed with parenthetical qualifiers, but 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?

With no output schema, the description correctly compensates by enumerating the return contents and the JSON-vs-CSV distinction, and it covers auth and window limits. It is close to complete; error behavior for an over-90-day window or result-size handling is the only notable 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 and the ≤90-day/ordering constraints are already documented in the schema. The description's 'Inputs: from and to as YYYY-MM-DD strings' restates the schema without adding format nuance beyond it, which is the baseline-3 case.

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+resource ('compliance evidence export') and pins down the payload precisely: per-week timesheet compliance, the TIMESHEET_* AuditLog event stream, and summary totals, plus a REST endpoint mapping. That implicitly separates it from generic siblings like export_audit_log or weekly_compliance, though it never names an alternative explicitly, which keeps it 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?

Gives the intended audience and use case (SOX/HIPAA shops feeding external GRC tools) and the gating conditions (ENTERPRISE+ tier, org.compliance.manage, ≤90-day window), but offers no explicit guidance on when to pick this over export_audit_log, list_audit_log, or weekly_compliance, which is the real selection question for an agent. 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.

export_audit_logA
Read-onlyIdempotent
Inspect

Read org audit log entries (ENTERPRISE+ feature). Requires OWNER or ADMIN org role. Returns up to 200 entries per call with optional filters: action, resource, userId, date range (from/to as ISO strings), and pagination (limit/offset). Each entry carries clientSurface (which client made the request: WEB, MAKER, EXTENSION, DESKTOP, MOBILE, MCP, PAT, SYSTEM, UNKNOWN) and clientLabel (the precise client). Distinct from actorType, which is the actor's privilege. Null on rows predating client attribution; that history is deliberately not backfilled, so a missing value means unknown rather than web.

NameRequiredDescriptionDefault
toNoISO date upper bound (inclusive).
fromNoISO date lower bound (inclusive).
limitNoMax entries to return. Default 50, max 200.
actionNoFilter by exact action name.
offsetNoSkip this many entries. Default 0.
userIdNoFilter to entries where this user is the actor.
resourceNoFilter by resource type (e.g. Task, Project).

TDQS

A4.1/5.0
Behavior5/5

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

Beyond the annotations (which already cover read-only, idempotent, non-destructive), the description adds the enterprise gating, required role, the 200-entry ceiling, and the subtle data-model semantics of clientSurface vs actorType. It also explains that null client values mean unknown rather than a default, which prevents a serious misreading of the data.

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 purpose, then prerequisites, then filters and return shape in a logical order with no filler sentences. The clientSurface/clientLabel explanation is detailed but earns its place by disambiguating the field; it could be trimmed slightly.

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 takes on the burden of describing returned fields and does so – entry count ceiling, filterable fields, and the clientSurface enumeration with null-handling. Nothing needed to call or interpret the result is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all seven parameters including defaults and ISO semantics. The description restates the filter set and the from/to ISO format but adds no syntax or behavioral detail for the parameters themselves. 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.

Purpose4/5

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

States a specific verb and resource (read org audit log entries) plus the gating tier, so an agent immediately knows what the call does. It does not, however, name or distinguish itself from the sibling audit tools (list_audit_log, get_audit_entry), so the agent must infer which is appropriate.

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

Usage Guidelines4/5

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

Explicitly gives the entitlement and role prerequisites (ENTERPRISE+ feature, OWNER or ADMIN org role), which tells the agent when the call is valid. It stops short of naming an alternative to use when the role/tier requirement is unmet or when a single entry is wanted.

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

fetchA
Read-onlyIdempotent
Inspect

Retrieve full content for one resource by id. The id MUST be one previously returned by the search tool, an opaque string of the form <type>:<cuid> (e.g. project:abc123…). Returns title, a single-string content blob (capped at 8 KB with a "more in app" trailer for longer items), and a url deep-link into the Onplana app. Use this AFTER search when you need the full body of a specific result to answer the user. Returns not_found if the id is invalid, malformed, or refers to a resource the caller can't see.

NameRequiredDescriptionDefault
idYesOpaque id from a prior `search` result, of the form `<type>:<cuid>`.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already cover read-only/idempotent/non-destructive, but the description goes further: it discloses the 8 KB content cap with a 'more in app' trailer, the returned fields (title, content blob, url deep-link), and the not_found behavior for invalid or inaccessible ids.

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 free of filler, though the id format/provenance is stated in both the first and second sentences, a minor redundancy in an otherwise tight four-sentence description.

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 describing the return payload and error behavior; combined with the provenance requirement, an agent has everything needed to call and interpret this tool correctly.

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

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 the MUST-provenance constraint and the concrete `<type>:<cuid>` format with an example, meaningfully enriching the single parameter beyond the schema text.

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

Purpose5/5

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

States a specific verb and resource: 'Retrieve full content for one resource by id.' It clearly distinguishes itself from the sibling `search` tool and from the many `get_*` siblings by framing itself as the full-body fetch.

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 it AFTER `search` when the full body of a specific result is needed, and constrains the id to one previously returned by `search`. The alternative (search) and the sequencing condition are both named.

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

find_meeting_timesC
Read-onlyIdempotent
Inspect

Find free meeting times across attendees using the Graph findMeetingTimes endpoint. Reuses Calendars.ReadWrite scope.

NameRequiredDescriptionDefault
attendeesYes
endWindowUtcNo
maxCandidatesNo
startWindowUtcNo
meetingDurationMinutesNo

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds genuine behavioral context by disclosing the required Calendars.ReadWrite scope (an auth/permission requirement), but it omits result limits, attendee-count caps, and what the returned candidate list looks like.

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

Conciseness4/5

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

Two tight sentences with the action front-loaded and no filler. The endpoint name is mildly redundant with the title but still informative for the calling agent.

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 a 5-parameter, no-output-schema tool, the description leaves the window/duration/candidate semantics entirely undocumented and says nothing about the shape of the returned time candidates. Annotations cover safety, but the functional contract is too thin.

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% across 5 parameters, and the description supplies no parameter meaning at all. An agent cannot learn from either source what startWindowUtc/endWindowUtc formats are expected, what meetingDurationMinutes defaults to, or how maxCandidates behaves.

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 ('Find free meeting times across attendees') and names the underlying Graph endpoint, so an agent knows exactly what the tool does. It is distinguishable from siblings like compose_meeting_invite or list_calendar_events, though it does not explicitly name an alternative 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 Guidelines2/5

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

There is no statement of when to use this tool versus alternatives such as list_calendar_events, compose_meeting_invite, or get_working_calendar. The only contextual hint is the scope reuse note, which 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.

find_similar_projectsA
Read-onlyIdempotent
Inspect

Find projects in this org similar to a given description OR to an existing project. Pass either projectId (similar to this project) or description (free-form). Returns up to 5 matches with similarity scores. Useful for "have we done a project like this before?" - requires the org's RAG index to be populated (Azure OpenAI required).

NameRequiredDescriptionDefault
limitNoDefault 5, max 20.
projectIdNoMutually exclusive with description.
descriptionNoMutually exclusive with projectId.

TDQS

A4.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 semantics, so the bar is low. The description adds a real prerequisite ('requires the org's RAG index to be populated (Azure OpenAI required)') and the return shape ('up to 5 matches with similarity scores'), which are genuine operational facts 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.

Conciseness5/5

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

Three compact sentences, front-loaded with the verb and resource, then parameter choice, then returns and prerequisite. No filler; 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 vector-search tool with no output schema, the description covers purpose, input selection, expected returns (count + scores) and the environmental prerequisite. It is essentially complete, with only minor omission of behavior when the RAG index is empty.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description goes slightly beyond by characterizing projectId as 'similar to this project' and description as 'free-form', giving the semantic intent behind each mutually exclusive choice rather than just repeating the exclusivity constraint.

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 ('Find projects in this org similar to...') with two clearly named input modes. An agent can distinguish it from generic sibling searches like search, search_docs, or search_org_knowledge because the target is project similarity, not document/knowledge lookup.

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 the trigger condition explicitly ('have we done a project like this before?') and clarifies the two mutually exclusive entry modes (projectId vs description). It doesn't name an alternative sibling to route to when the RAG index is unavailable, so it stays 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.

gantt_optimizeA
Destructive
Inspect

Ask the AI to propose a new schedule for a project that fits all tasks before a target deadline while respecting dependencies. Returns an array of {taskId, startDate, dueDate} proposals (YYYY-MM-DD strings), any warnings, and feasibility status. Use mode="preview" (default) to inspect the proposal first; use mode="apply" to capture a baseline and commit the dates immediately (requires project Owner or Manager role). Cap: 100 tasks per project. Use when the user asks "can we finish by [date]?" or "reschedule this project to meet the deadline".

NameRequiredDescriptionDefault
modeNopreview (default): return proposals without writing. apply: capture a baseline then commit all proposed dates. Requires project Owner or Manager role.preview
deadlineYesTarget end date in YYYY-MM-DD format. All tasks will be proposed to finish on or before this date.
previewIdNoThe previewId a preview of this project returned. When a preview returns one, apply mode writes exactly that stored preview instead of proposing again, and refuses without it or when the plan changed since.
projectIdYesID of the project to optimize the schedule for.
levelResourcesNoWhen true (default: false), the AI avoids overallocating any user beyond their ResourceCapacity.hoursAvail for the week.
allowOverallocationNoWhen true, overallocation warnings are surfaced but not treated as failures. Default false (overallocation causes a retry).

TDQS

A4.9/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 substantial context beyond them: apply captures a baseline then commits immediately, requires elevated role, refuses when a previewId is missing or the plan changed, and warns on overallocation. That is exactly the mutation-safety detail 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?

Four compact sentences with no filler, front-loaded with purpose, then returns, then mode guidance, then cap and trigger conditions. Every sentence carries distinct 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?

No output schema exists, and the description takes on that burden by naming the return shape ({taskId, startDate, dueDate} with YYYY-MM-DD, warnings, feasibility status). Combined with the role, cap, and mode caveats, 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; however the description adds meaning not present in the schema, notably the 100-task-per-project cap and the overallocation retry behavior, plus a readable restatement of preview/apply tradeoffs. It does not fully compensate where schema already documents previewId and deadline.

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 ('propose a new schedule for a project') with the objective (fit all tasks before a target deadline) and constraint (respecting dependencies). It also previews the return payload, so an agent knows exactly what the tool produces.

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

Usage Guidelines5/5

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

Explicitly separates preview vs apply, states the authorization requirement for apply (Owner or Manager), the 100-task cap, and gives literal trigger phrases ('can we finish by [date]?', 'reschedule this project to meet the deadline'). This routes the agent unambiguously, including against the adjacent auto_schedule_proposal.

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

generate_status_reportA
Read-onlyIdempotent
Inspect

Generate a Markdown status report for one project (current state, task counts, top risks, recommendations). Returns the report inline; does NOT email it (user can copy or ask "email this to ..." for a separate explicit step). Caller must have visibility into the project.

NameRequiredDescriptionDefault
localeNoOptional. The language to write in, as an app language code: en, es, pt-BR, fr, ar, zh-CN, ja, de or it. Anything else, or nothing, is English.
projectIdYes

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 genuinely new context: output is returned inline rather than emailed, and the caller must have project visibility. It stops short of covering size limits or failure 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?

Front-loaded with the action and resource, followed by the content list, then the key behavioral caveat (no email). No redundant restatement of the title or parameters.

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 explains the return shape (inline Markdown report containing state, counts, risks, recommendations). The only gap is projectId's expected form, which is neither in the schema nor the description.

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%: locale is fully documented in the schema, while projectId has no description. The description only implicitly scopes projectId to 'one project' and adds the visibility requirement; it gives no format hints. Baseline 3 applies when the schema carries part of the load.

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 Markdown status report for one project') and enumerates the report contents (current state, task counts, top risks, recommendations). It does not explicitly distinguish itself from near-siblings like compose_status_digest, week_status, or summarize_project, 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?

Usage context is implied: it produces a report for one project and explicitly does not email it, deferring email to a separate explicit step. However, there is no guidance on when to choose this over overlapping siblings such as compose_status_digest or week_status, and no stated prerequisites beyond visibility.

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

get_agent_skillA
Read-onlyIdempotent
Inspect

Returns the full text of an Onplana agent skill: a written guide to driving this MCP server for a particular job, covering the cold-start sequence, which tools to reach for, and the conventions Onplana expects. Two exist. planner turns a goal or brief into an executable plan, a plan document plus a task tree with dates, dependencies and owners. autonomous runs an existing plan, claiming tasks, recording evidence and handing back. Called with no argument it lists both without their bodies. The same text is downloadable at onplana.com/agent-skill for clients that install skills as files. No plan gate; all plans.

NameRequiredDescriptionDefault
skillNoWhich skill to return: "planner" or "autonomous". Omit to list both.

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, and non-destructive, so the safety profile is covered. The description still adds useful context beyond them: the no-argument listing behavior, that the payload is full guide text rather than a reference, that the same text is mirrored at a URL for file-installing clients, and the opaque note 'No plan gate; all plans.'

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

Conciseness4/5

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

Front-loaded with the core purpose and efficiently dense despite its length; each sentence after the first adds a distinct fact (the two skills, the listing behavior, the external mirror). The trailing 'No plan gate; all plans.' is cryptic and slightly undercuts otherwise tight structure.

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 it does so adequately: full guide text when a skill is named, a body-less list when omitted. Format details (e.g., markdown vs. structured) are not specified, but the agent has enough to call and consume 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% and the enum is documented, so the schema baseline is 3. The description goes further by explaining what each enum value actually produces (planner = plan document plus task tree; autonomous = claim/execute/hand-back), which is meaning the schema's bare value names do not convey.

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

Purpose5/5

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

States a specific verb and resource (returns the full text of an agent skill) and immediately defines what that content is: a guide covering cold-start, tool selection, and conventions. It names both enum values and describes the job each one serves, so an agent understands the tool's scope without opening the schema.

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

Usage Guidelines4/5

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

Gives clear invocation context — omitting the argument lists both skills without bodies — and explains what each skill is for (planning vs. executing). It does not, however, route against plausible siblings like agent_bootstrap, read_agent_brief, or describe_capabilities, so the agent must infer when to prefer this over them.

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

get_ai_budgetA
Read-onlyIdempotent
Inspect

Read the caller org's AI token budget: monthly cap, per-seat cap, active members feeding the cap, top-up tokens, and the source label (unlimited / no-ai / tier / top-up-only). Use BEFORE calling tools that burn AI tokens (summarize_project, analyze_project_risks, generate_status_report, etc.) so you can fail fast or fall through to a non-AI path.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.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. The description adds real value beyond that: it discloses the source-label enum semantics (unlimited/no-ai/tier/top-up-only) and the behavioral intent of gating AI-consuming calls. It stops short of stating auth needs or what happens on cap exhaustion, keeping it at 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?

Two sentences, both earning their place: the first enumerates returned fields, the second gives usage guidance. The action-critical 'use before...' instruction is front-loaded logically and 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?

No output schema exists, and the description compensates by listing exactly what is returned. Combined with the usage guidance and annotation-provided safety profile, an agent has everything it needs to call this zero-param tool correctly.

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

Parameters4/5

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

The tool takes zero parameters, so per the rubric the baseline is 4. The description correctly does not invent parameter guidance, and its field enumeration describes output rather than inputs.

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

Purpose5/5

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

States a specific verb ('Read') and resource (the caller org's AI token budget) and enumerates the exact fields returned (monthly cap, per-seat cap, active members, top-up tokens, source label). This clearly distinguishes it from near-siblings like get_my_quota_usage or get_capacity by scoping to the org budget.

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 prescribes when to call it — 'BEFORE calling tools that burn AI tokens' — and names concrete alternatives (summarize_project, analyze_project_risks, generate_status_report). It even gives the decision rationale: fail fast or fall through to a non-AI path.

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

get_audit_entryA
Read-onlyIdempotent
Inspect

Read one AuditLog row by id. Returns the full payload including before / after snapshots when present. Org-scoped findFirst, so a cross-org id returns 404. OWNER or ADMIN + auditLogs feature. Includes clientSurface (which client made the request: WEB, MAKER, EXTENSION, DESKTOP, MOBILE, MCP, PAT, SYSTEM, UNKNOWN) and clientLabel (the precise client). Distinct from actorType, which is privilege. Null on rows predating client attribution; that history is not backfilled.

NameRequiredDescriptionDefault
entryIdYesAuditLog row id.

TDQS

A4.4/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, but the description adds substantial context beyond them: required role plus feature flag, org-scoped findFirst that yields 404 for cross-org ids, the before/after payload shape, and the null-not-backfilled behavior of client attribution fields.

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

Conciseness4/5

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

Front-loads purpose and payload, then access, then field semantics. The clientSurface enumeration is long but earns its place by disambiguating a return field that no output schema documents. Slightly dense but no wasted sentences.

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

Completeness5/5

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

With no output schema, the description carries the burden of explaining the return payload, nullability, and the clientSurface/clientLabel vs actorType distinction, plus access and scoping rules. 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% and there is a single parameter documented as 'AuditLog row id.' The description says 'by id' but adds no format, source, or ambiguity guidance 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 ('Read one AuditLog row by id'), and the singular 'one row by id' implicitly distinguishes it from the sibling list_audit_log and export_audit_log. An agent knows exactly what it retrieves and the required key.

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

Usage Guidelines4/5

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

Gives clear context for use: single-row lookup by id, with prerequisites spelled out (OWNER or ADMIN + auditLogs feature) and the cross-org 404 behavior. It does not explicitly name list_audit_log as the alternative for querying many rows, 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.

get_baselineA
Read-onlyIdempotent
Inspect

Full baseline snapshot for one project baseline row. Returns the serialised snapshot JSON (tasks + estimated hours + dates at the time of capture) for variance tracking. Available on every plan.

NameRequiredDescriptionDefault
baselineIdYes

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 value beyond them by disclosing the return shape (serialised snapshot JSON with tasks, estimated hours and capture-time dates) and that the tool is available on every plan, which matters in a gated product tier system.

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

Conciseness5/5

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

Three short sentences, front-loaded with what it returns, followed by purpose and a plan-availability note. 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?

With no output schema, the description correctly carries the return-value burden by enumerating snapshot contents. Annotations cover the operation's safety profile. Only minor gaps remain (parameter format, explicit path from list_baselines) for a simple single-parameter getter.

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?

One parameter at 0% schema description coverage, so the schema does not explain it. The description implies baselineId identifies a baseline row rather than a project, which adds some meaning, but gives no format or sourcing guidance (e.g., obtain from list_baselines).

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: retrieving the full baseline snapshot for a single baseline row. The phrase 'one project baseline row' implicitly contrasts with the list-style sibling list_baselines and with compare_baseline, so an agent can pick this 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 Guidelines3/5

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

The phrase 'for variance tracking' implies why one would call it, but no explicit when-to-use or alternatives (list_baselines, compare_baseline) are named. Usage is inferable rather than stated.

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

get_capacityA
Read-onlyIdempotent
Inspect

Read one user's weekly available hours. Defaults to the caller's own row + the current Monday. Reading another user's capacity requires OWNER / ADMIN / MANAGER org role. PREFER get_capacity_report for the org-wide team utilisation rollup.

NameRequiredDescriptionDefault
userIdNoOptional. Defaults to caller.
weekStartNoISO date. Defaults to current Monday.

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 safety profile is covered. The description adds genuinely new behavioral context: the authorization requirement for cross-user reads and the implicit defaulting of both parameters. It does not describe the returned payload shape, but that is minor for a simple 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?

Three short sentences, front-loaded with what the tool does, then defaults, then the permission caveat, then the alternative. No filler or repetition.

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

Completeness5/5

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

For a zero-required-parameter read with no output schema, the description covers purpose, defaults, authorization, and the main sibling alternative. 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 description coverage is 100%, so both parameters are already documented in the schema, including their defaults. The description mirrors that defaulting information rather than adding syntax or edge-case meaning, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Read one user's weekly available hours') with explicit scope (single user, one week). It distinguishes itself from both siblings: set_capacity (write) and get_capacity_report (org-wide rollup).

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

Usage Guidelines5/5

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

Gives explicit defaulting behavior (caller's own row, current Monday), a permission prerequisite for reading another user's row (OWNER/ADMIN/MANAGER), and routes the agent to the alternative when an org-wide view is wanted. Both when-to-use and when-to-use-something-else are covered.

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

get_change_requestA
Read-onlyIdempotent
Inspect

Full change-request detail incl. reviews (per-reviewer decisions) + designated reviewers. Plan gate: changeControl (ENTERPRISE+).

NameRequiredDescriptionDefault
changeRequestIdYes

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, closed-world and non-destructive behavior, so the description earns credit for adding the ENTERPRISE+ entitlement gate, which is a failure mode annotations can't express. It also discloses the response contents (reviews, designated reviewers), though it doesn't say what happens if the CR id doesn't exist.

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 telegraphic clauses: what you get, then the gate condition. Zero filler, and the payload contents are front-loaded ahead of the entitlement caveat.

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 name the notable return fields (reviews, designated reviewers) and the plan prerequisite. For a one-parameter read tool that is nearly sufficient; only id semantics and lookup-failure behavior are 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 0% and there is a single required changeRequestId, so the description must carry the burden. It implies the parameter identifies a change request but adds no format, source, or example for the id. The mapping is obvious enough not to be misleading, but nothing is added.

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 detail) and resource (change request) and enumerates what the payload contains: reviews with per-reviewer decisions plus designated reviewers. This distinguishes it implicitly from list_change_requests and get_change_request_history, though neither sibling is named.

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 'Plan gate: changeControl (ENTERPRISE+)' note tells the agent when it can succeed, which is real usage context. But there is no explicit instruction on when to prefer this over list_change_requests or get_change_request_history, so the when-to-use 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.

get_change_request_historyA
Read-onlyIdempotent
Inspect

Get field-level change history for one change request. Feature: changeControl (ENTERPRISE+).

NameRequiredDescriptionDefault
limitNoMax revisions to return (1-50, default 20).
cursorNoLast revision id for cursor-based pagination.
changeRequestIdYesChange request id to retrieve history for.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is free. The description adds a real behavioral fact beyond annotations — the changeControl ENTERPRISE+ entitlement gate — but says nothing about retention, pagination behavior, or the shape of the history records.

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, purpose first, entitlement constraint second. Zero waste and correctly 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?

For a read-only, non-destructive tool with full schema coverage and no output schema, the description covers what is needed to invoke it correctly, including the tier gate. Minor omission: no hint about pagination follow-through even though cursor is offered.

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% (limit range/default, cursor semantics, changeRequestId), so the schema already carries the parameter burden. The description adds no additional parameter meaning, which is the expected 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 (get), resource (change request), and scope (field-level change history for ONE change request). This cleanly separates it from get_change_request (current state) and the other *_history siblings like get_task_history or get_document_history.

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 name and purpose (fetch revision history), but there is no explicit when-to-use guidance or routing to alternatives such as get_change_request for current values. Adequate but leaves the agent to infer the boundary.

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

get_closeout_statusA
Read-onlyIdempotent
Inspect

Read a project's closeout record: its state (DRAFT, IN_REVIEW or SIGNED_OFF), the final baseline and the EVM summary captured when it started (cost figures are null for a caller who may not read the project's cost), the closeout report document, the sign-offs and the quorum, the lessons learned, and what this caller may do next. closeout is null when none was started. Any caller who can read the project, or a reviewer named on its closeout.

NameRequiredDescriptionDefault
projectIdYes

TDQS

A4/5.0
Behavior5/5

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

Annotations already establish readOnly, idempotent, non-destructive, closed-world behavior, and the description adds substantial context beyond that: closeout is null when none was started, cost figures are redacted for callers lacking project cost access, and access is allowed to project readers or named closeout reviewers.

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 avoids filler. The long enumeration of returned fields is dense but useful; it could be more structured, but every sentence contributes relevant information.

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

Completeness4/5

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

With no output schema, the description does a good job describing the returned closeout record and its nullability/access behavior. The main gap is that the sole input parameter is not further explained, but annotations already carry the safety profile.

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 schema has one required parameter, projectId, with 0% schema description coverage. The description implies that projectId identifies the project whose closeout is being read, but it adds no format, sourcing, or validation detail to compensate for the missing schema 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?

The description states a specific read operation on a well-defined resource: a project's closeout record. It enumerates the returned components (state, baseline, EVM summary, report, sign-offs, lessons, permitted next actions), making it clearly distinct from write-side siblings like initiate_closeout or submit_closeout_signoff.

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 who is allowed to call it, but does not explicitly state when to use this tool versus related alternatives such as initiate_closeout, update_closeout_lessons, or get_readiness_status. Usage is strongly implied by the read-only nature of the tool, but alternative routing is left to inference.

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

get_cost_line_historyA
Read-onlyIdempotent
Inspect

The change history of one cost line, newest first: one row per changed field (label, category, amount, currency, status, date, taskId, note) with the old and new value, plus a "created" row and, for a deleted line, a "deleted" row holding its last values as JSON. Answers for a deleted line too. Access: budget.read.

NameRequiredDescriptionDefault
costLineIdYes

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the read-only annotations, the description discloses the output behavior: newest-first ordering, one row per changed field with old and new values, a created row, and a deleted row containing last values as JSON. It also states the required access scope, budget.read, and confirms the tool works for deleted lines.

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 and mostly efficient, packing useful output details into a compact form. The final sentence 'Answers for a deleted line too' slightly repeats the preceding deleted-row clause, but the redundancy is minor.

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

Completeness5/5

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

With no output schema, the description carries the burden of explaining return values and does so well: row granularity, field coverage, ordering, and special created/deleted rows are all described. Access requirements are also included, making the definition complete for correct invocation and interpretation.

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

Parameters4/5

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

The schema has no description for costLineId, but the description clarifies that it identifies one cost line and that deleted line IDs are also accepted. This meaningfully extends the parameter semantics beyond the bare string 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 precise verb and resource: the change history of one cost line. It distinguishes this from listing or updating cost lines by describing the returned rows, including created and deleted rows, so an agent can immediately tell this is the history retrieval 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?

The description gives clear context for when this tool is appropriate: retrieving field-level changes for a single cost line, including deleted lines. It does not explicitly name alternatives such as list_cost_lines, but the history-specific purpose is clear enough to guide selection.

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

get_custom_field_valuesA
Read-onlyIdempotent
Inspect

List populated custom-field values across one project (default entityType=TASK; PROJECT and PROPOSAL also supported). Returns each row with its field definition's name + type joined for context. Requires PRO+ customFields feature + project read access.

NameRequiredDescriptionDefault
projectIdYes
entityTypeNo

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 genuinely new behavioral facts: the feature-gate and access requirement, and the shape of returned rows (field name + type joined for context).

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

Conciseness5/5

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

Two dense sentences, front-loaded with scope and default, followed by return shape and prerequisites. No filler; every clause adds 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 steps in to describe row composition and covers the feature/access prerequisites for a read tool. It omits pagination/result-limit behavior and does not fully define what 'populated' excludes, which are minor gaps for a bounded per-project list.

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

Parameters3/5

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

Schema description coverage is 0%, so the description carries the burden; it usefully documents entityType (default TASK, three allowed values) beyond the bare enum. However projectId is left entirely to inference, so it only partly 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?

Specific verb (list) plus a precise resource (populated custom-field values) scoped to one project. The word 'populated' and the contrast with field definitions distinguishes it from list_custom_field_defs and the set_* write 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 clear operating context: default entityType=TASK, with PROJECT and PROPOSAL also valid, plus prerequisites (PRO+ customFields feature and project read access). It stops short of stating when to prefer a sibling tool or any exclusions, so it is strong 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.

get_document_historyA
Read-onlyIdempotent
Inspect

Get rename history for one workspace document. Caller must be a member of the parent project.

NameRequiredDescriptionDefault
limitNoMax revisions to return (1-50, default 20).
cursorNoLast revision id for cursor-based pagination.
documentIdYesWorkspace document id to retrieve history for.

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, non-destructive, and closed-world, so the safety profile is covered. The description adds non-obvious value by disclosing the authorization requirement (parent-project membership) and narrowing scope to rename history only, but it says nothing about pagination behavior or result size.

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, scope stated first and the access constraint second. Every sentence 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?

For a read-only history lookup with full schema coverage and no output schema, the description covers what is returned (rename history) and the access condition. It leaves the shape of returned history entries and pagination expectations unstated, but these are minor given the tool's simplicity.

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 limit range/default and cursor semantics, so the schema carries parameter meaning fully. The description adds no additional parameter guidance beyond the schema, making the baseline 3 the correct 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 (get) and resource (rename history for one workspace document), which is clear and actionable. It does not explicitly distinguish itself from close siblings like get_document_metadata, list_document_versions, or get_row_history, so an agent must infer the difference from scope 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?

Gives a precondition ('caller must be a member of the parent project') but no when-to-use framing or named alternatives. An agent can infer this is for retrieving a document's rename history, but nothing routes it away from get_document_metadata or list_document_versions when the intent is ambiguous.

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

get_document_metadataA
Read-onlyIdempotent
Inspect

Read one WorkspaceDocument row by id. Metadata only (no bytes). Access via project membership on the parent library's project; org-admin canViewAll also OK. 404 on cross-org / no-access. PREFER list_documents for browsing a library; PREFER get_document_history for rename history.

NameRequiredDescriptionDefault
documentIdYesWorkspaceDocument row id.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations cover safety (readOnly, idempotent, non-destructive), and the description goes further with the authorization model (project membership on the parent library's project, org-admin canViewAll), the failure contract (404 on cross-org / no-access), and what is not returned (no bytes). These are exactly the access and error semantics an agent needs before calling.

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

Conciseness5/5

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

Four short sentences, each load-bearing: identity, return scope, auth semantics, then sibling routing. Front-loaded with the core action, 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 one parameter, rich annotations, and no output schema, the description is nearly complete: it covers access, error, and non-content nature. It does not hint at what metadata fields come back, though for a single-row metadata read that omission is minor.

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

Parameters3/5

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

Schema coverage is 100% for the single parameter ('WorkspaceDocument row id'), so the schema already carries the meaning. The description's 'by id' adds no syntax or format detail beyond that, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Read one WorkspaceDocument row by id') plus a scope qualifier ('Metadata only (no bytes)') that separates it from content-reading siblings. It also names the two siblings it must not be confused with, so an agent can place it precisely among ~200 tools.

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 routing: 'PREFER list_documents for browsing a library; PREFER get_document_history for rename history.' This gives both the alternative and the condition that selects it, leaving nothing to inference.

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

get_epicA
Read-onlyIdempotent
Inspect

Full detail on one epic incl. linked tasks summary (id/title/status/assigneeId/collaborators), project context, audit fields. Out-of-scope epicIds return not_found.

NameRequiredDescriptionDefault
epicIdYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds real value beyond that by enumerating the returned sub-fields and disclosing failure semantics ('out-of-scope epicIds return not_found'), which tells the agent how to interpret a miss.

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

Conciseness4/5

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

Two sentences, front-loaded with the core purpose and with zero filler; the parenthetical field list is dense but informative rather than padding.

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

Completeness4/5

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

With no output schema, the description carries the return-shape burden and does so by naming the linked-task fields and audit/context sections, plus the not_found failure mode. Only the epicId format and any permission prerequisites 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?

There is a single required epicId at 0% schema description coverage, so the schema contributes nothing about it. The description only implies that IDs are scope-validated (out-of-scope ones return not_found) but never states the expected format or where a valid epicId comes from, leaving the parameter partly opaque.

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 ('Full detail on one epic') and immediately scopes the payload to linked tasks summary, project context, and audit fields. This distinguishes it from the sibling list_epics by singularity, though it never names that sibling explicitly.

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

Usage Guidelines3/5

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

Usage is only implied: an agent can infer this is the single-entity drill-down after listing epics. There is no explicit when-to-use or when-to-prefer-an-alternative statement, and the only routing hint is error behavior (out-of-scope IDs return not_found), which 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.

get_ideaA
Read-onlyIdempotent
Inspect

Read one idea in full, including any stored AI feedback pass (critique, sharpening questions, risks, and the recommended route) and what it was promoted into. Read this before update_idea so you can pass expectedUpdateRevision.

NameRequiredDescriptionDefault
ideaIdYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare the safe-read profile (readOnlyHint, idempotentHint, non-destructive, closed-world), so the description is not obliged to restate safety. It adds real value by disclosing the return payload (critique, sharpening questions, risks, recommended route, promotion target) and by surfacing the revision-token workflow dependency, which no annotation conveys.

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

Conciseness5/5

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

Two sentences, both earning their place: the first defines scope and payload, the second defines the sequencing dependency. Nothing is redundant with the title or annotations, and the scope statement 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?

For a single-read tool with annotations covering safety and no output schema, the description adequately explains what comes back and why an agent would call it before update_idea. The only meaningful gap is the identifier semantics of ideaId, which neither the schema nor the description supplies.

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

Parameters3/5

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

There is one parameter (ideaId) at 0% schema description coverage, so the description must compensate for the missing format/identifier details. It implies the parameter identifies a single idea but never states the ID format, source, or whether it accepts slugs versus UUIDs. The revision-token mention is about update_idea's input, not this tool's 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 and resource ('Read one idea in full') and enumerates the payload it returns: AI feedback pass components and the promotion target. This distinguishes it cleanly from the sibling list_ideas, which an agent can rule out without opening either schema.

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

Usage Guidelines4/5

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

Explicitly names a sibling and the ordering constraint: 'Read this before update_idea so you can pass expectedUpdateRevision.' That is clear when-to-use guidance with a concrete reason. It stops short of stating when not to use it or pointing at list_ideas for browsing, so it is strong but not exhaustive.

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

get_issueA
Read-onlyIdempotent
Inspect

Full detail on one Issue: status, severity, owner/reporter, resolution, linked Task/Risk/CR, and recent comments (so you can see human responses on an issue you filed without a separate list_comments call), and the issue attachments as metadata. On a bug report the attachment is usually the evidence, so triage starts here; use read_issue_attachment to open one.

NameRequiredDescriptionDefault
issueIdYes

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/openWorld=false, so the safety profile is covered. The description adds real behavioral detail beyond them: it discloses that comments are inlined and that attachments are returned as metadata only, not content, which prevents an agent from expecting file bodies. No mention of permissions or pagination limits keeps this 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?

Two sentences, front-loaded with the returned-content list and the routing hint at the end. Efficient overall, though the parenthetical about comments is slightly long and could be tightened without losing meaning.

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

Completeness5/5

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

With no output schema, the description carries the burden and does it: it enumerates the fields returned and explicitly scopes attachments to metadata. An agent knows what it will receive and where to go next, so 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?

Schema description coverage is 0% for the single issueId parameter, and the description never clarifies its expected format (e.g., 'ISS-123') or whether it accepts a key vs. numeric id. The name is largely self-descriptive, so this is adequate but leaves the gap the description should have filled.

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 ('Full detail on one Issue') and then enumerates exactly which fields come back (status, severity, owner/reporter, resolution, linked Task/Risk/CR, recent comments, attachment metadata). This lets an agent separate it from list_issues (many), get_issue_history (history only), and list_comments (comments only) 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 clear context ('triage starts here' on a bug report) and names the follow-up alternative explicitly ('use read_issue_attachment to open one'), plus the avoidance case for list_comments. No explicit when-not condition or comparison against the sibling list_issues, so it falls 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.

get_issue_historyA
Read-onlyIdempotent
Inspect

Field-level change log for one Issue (status moves, severity bumps, owner reassignments, resolution). Clone of get_task_history. Use before updating an issue another agent may have touched.

NameRequiredDescriptionDefault
limitNoMax revisions (1-50, default 20).
issueIdYes

TDQS

A3.9/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. The description adds the semantic content of the log entries, which is useful, but says nothing about ordering, retention window, or how the limit truncates results. That is adequate-but-thin against annotations that already carry the main behavioral burden.

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 clauses, front-loaded with the purpose and then the log contents and the call-site guidance. "Clone of get_task_history" is a slightly awkward aside but it is compact and serves routing, so nearly every word 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?

There is no output schema, so the parenthetical list of change types effectively stands in for a description of what comes back, and the pre-update usage note covers the agent's decision point. Only the absence of any note on result volume or ordering keeps this from being fully complete for a 2-parameter read tool.

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

Parameters3/5

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

Schema description coverage is 50%: limit is documented in the schema (1-50, default 20) while issueId is not, though its meaning is self-evident from the name. The description contributes no additional parameter meaning, so it neither compensates for the gap nor overlaps the existing 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?

"Field-level change log for one Issue" states a specific verb-plus-resource, and the parenthetical enumerates exactly what the log contains (status, severity, owner, resolution). Naming get_task_history as the clone and implying contrast with get_issue (current state) lets an agent separate 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 Guidelines4/5

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

"Use before updating an issue another agent may have touched" gives a concrete trigger condition, which is unusually actionable for a read tool. It stops short of naming the alternative reads (get_issue, list_issues) for the case where no conflict check is needed, so it is clear context without full when/when-not coverage.

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

get_milestoneA
Read-onlyIdempotent
Inspect

Full detail on one Milestone row. Distinct from Task.isMilestone — Milestone is its own first-class entity with dueDate + completed.

NameRequiredDescriptionDefault
milestoneIdYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered without the description's help. The description adds domain semantics (first-class entity with dueDate + completed) but nothing on missing-ID behavior or return shape, so it is a modest add-on against an already-strong annotation set.

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

Conciseness5/5

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

Two short sentences, zero filler, with the core purpose front-loaded and the disambiguating clause following immediately. Nothing could be cut without losing information.

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

Completeness4/5

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

For a read-only single-entity fetch with a one-field schema and rich read-only annotations, the description is nearly sufficient; it even flags two returned fields. It claims 'Full detail' without indicating the return surface, and no output schema exists to carry that, leaving a small 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 0% and the single milestoneId parameter has no documented format beyond being a required string. The description's 'one Milestone row' frames it as a singular identifier lookup, which is weakly helpful, but it adds no syntax or source-of-value detail to compensate for the empty schema 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?

Names a specific verb+resource ('Full detail on one Milestone row') and explodes a real ambiguity by contrasting with Task.isMilestone, noting Milestone is a first-class entity with dueDate + completed. It does not explicitly contrast with the actual sibling list_milestones, so a 4 rather than a 5.

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

Usage Guidelines3/5

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

Usage is only implied: the tool fetches one row, so an agent can infer it is the singular counterpart to list_milestones. There is no explicit when-to-use or when-not-to-use statement, however, so guidance stays at minimum-viable.

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

get_my_quota_usageA
Read-onlyIdempotent
Inspect

Return per-tool monthly quota usage for the calling org/agent. Default returns ONLY tools you have called this month (small payload). Pass includeAllExposed=true to pre-flight every registered tool before a long job. Pass cappedOnly=true to skip unlimited tools. Used count resets at the start of each calendar month (UTC); resetAt in the response is the next reset timestamp. capacityPct 100+ means at/over cap. Reading it ahead of a multi-day job is what surfaces a cap before it becomes a mid-flight 429.

NameRequiredDescriptionDefault
cappedOnlyNoDefault false. When true, skip tools whose cap is unlimited (-1) for the caller's plan.
includeAllExposedNoDefault false. When true, returns one row per registered tool (even unused).

TDQS

A4.6/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: default result set is restricted to tools called this month, counts reset at the start of each calendar month (UTC), resetAt is the next reset timestamp, and capacityPct >= 100 means at/over cap. The 429 consequence is disclosed as the motivating behavior.

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

Conciseness4/5

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

Front-loads the default behavior in the first sentence, then handles each flag and the reset semantics compactly. The closing sentence is slightly redundant with the includeAllExposed pre-flight guidance, but it earns its place by naming the concrete failure mode (429).

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 explaining the response surface it references (resetAt, capacityPct thresholds) and the reset cadence. Combined with full parameter documentation and annotation coverage, 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.

Parameters4/5

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

Schema coverage is 100% and both booleans are documented in the schema, so the baseline is 3. The description still adds value by attaching a scenario to each flag (pre-flight before a long job; skipping unlimited tools), which clarifies intent beyond the schema's literal wording.

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: 'Return per-tool monthly quota usage for the calling org/agent.' This is immediately distinguishable from adjacent quota/capacity siblings like get_ai_budget, get_capacity, and get_seat_count because it is explicitly per-tool, monthly, and caller-scoped.

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 when-to-use context: default for a small payload, includeAllExposed=true to pre-flight every registered tool before a long job, cappedOnly=true to skip unlimited tools. The final sentence adds a concrete trigger (surface a cap before a mid-flight 429). No alternative tool is named, so it stops just short of explicit when-not/alternatives guidance.

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

get_notification_preferencesA
Read-onlyIdempotent
Inspect

Retrieve the calling user's notification preferences (email on/off, task-assigned, overdue, project updates, weekly digest, plus the grouped email opt-outs: timesheetEmails, approvalEmails, workflowEmails). Returns system defaults when the user has not yet saved preferences.

NameRequiredDescriptionDefault

No parameters

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, so the safety profile is covered. The description adds real value beyond that by disclosing fallback behavior — system defaults are returned when the user has never saved preferences — plus the exact composition of the response payload.

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

Conciseness4/5

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

Two sentences, front-loaded with the action and scope; the fallback behavior is placed last where it belongs. The long parenthetical field list is dense but each item is informative, not 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?

There is no output schema, so the description must carry the return shape, and it does: it names every top-level preference, the three grouped email opt-outs, and the defaults fallback. Only the exact nesting/grouping structure of the opt-outs is left 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?

Zero parameters, so the baseline is 4. The description's field enumeration is about return content rather than input semantics, but no input meaning is missing.

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 ('Retrieve') plus a precisely scoped resource ('the calling user's notification preferences'), with the returned fields enumerated. It is clearly distinct from update_notification_preferences and from list_notifications 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 Guidelines3/5

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

Usage is implied by 'the calling user's' (no user argument needed), but the description never states when to call this versus update_notification_preferences or list_notification_types, and offers no exclusions. Adequate but leaves routing to inference.

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

get_pageA
Read-onlyIdempotent
Inspect

Get one web part page by id. Viewers get the published content only (a never-published page is not found for them). Editors additionally get the working draft, the current updateRevision (pass it to update_page), and the version history summary.

NameRequiredDescriptionDefault
pageIdYesPage id from list_pages.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the annotation title previews the viewer/editor split. The description adds useful behavioral detail beyond that: never-published pages are not found for viewers, and editors receive the working draft plus the updateRevision needed for update_page. It is valuable but partly overlaps with the annotation title and does not cover error behavior beyond the viewer not-found case.

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 tightly written sentences. It front-loads the core action and then layers role-specific behavior without wasted wording.

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 and a single required parameter, the description supplies the key return-value context an agent needs: viewers get only published content, while editors get the working draft, updateRevision, and version history summary. The never-published-page edge case further rounds out the behavioral picture.

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

Parameters3/5

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

There is only one parameter and schema description coverage is 100%, with the schema already explaining that pageId comes from list_pages. The description does not add any new syntax or format constraints for pageId, 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 gives a specific verb and resource: 'Get one web part page by id.' It clearly distinguishes the operation from list_pages by focusing on a single page, and it names update_page as the consumer of updateRevision, making the tool's role 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?

The description establishes clear context: use this when you have a pageId from list_pages and need one page. It also explains that updateRevision should be passed to update_page, linking the read to the subsequent update. It does not explicitly state when not to use it or contrast it with neighboring page tools, so it falls short of a full 5.

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

get_planA
Read-onlyIdempotent
Inspect

Return a project's full plan tree in one call: project + epics + sprints + tasks (with parentId, epicId, sprintId, assignee, collaborators) + milestones. Optional includeDependencies adds each task's predecessor / successor edges; includeAgentBriefs adds the per-task brief. Capped at 500 tasks per response (taskTruncated=true if more exist - fall back to list_tasks for paginated reads).

NameRequiredDescriptionDefault
projectIdYesProject id from list_projects.
includeAgentBriefsNoDefault false. When true, each task includes its agentBrief field.
includeDependenciesNoDefault false. When true, each task includes predecessors/successors arrays.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false), so the bar is lower, and the description goes beyond them by disclosing the non-obvious 500-task cap and the taskTruncated=true signal. It still does not say whether the tree is deep (subtasks) or how ordering works, so it is not fully rich.

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

Conciseness4/5

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

A single front-loaded sentence that opens with the verb and resource, then lists optional enrichments and the cap. It is dense and information-packed, but the stacked parenthetical and semicolon clause make it slightly harder to scan than a clean multi-sentence form.

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

Completeness4/5

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

With no output schema, the description carries the burden of describing the payload, and it does so well by enumerating included entities and task fields plus the truncation flag. It omits nesting depth, ordering, and whether milestones/sprints carry their own children, leaving minor gaps for a composite read tool.

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

Parameters3/5

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

Schema description coverage is 100%, so both optional flags are already documented, and the description's gloss ('each task's predecessor/successor edges', 'the per-task brief') is roughly equivalent to what the schema says. Baseline 3 is correct where the schema carries the parameter detail.

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

Purpose5/5

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

States a specific verb ('Return') plus a precisely enumerated resource ('project + epics + sprints + tasks + milestones'), and the phrase 'full plan tree in one call' distinguishes it from the granular siblings get_epic, get_sprint, list_tasks and get_subtree. An agent can route to 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?

It identifies the situation that selects an alternative — exceeding the 500-task cap means 'fall back to list_tasks for paginated reads' — which is explicit routing guidance. It does not explicitly say when to prefer this over get_subtree or the individual list_* tools, so it stops short of the when/when-not/alternatives ideal.

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

get_plan_featuresA
Read-onlyIdempotent
Inspect

Read the caller org's plan code, plan display name, resolved feature flag map (plan defaults merged with admin overrides), trial end date, and billing interval. Use this before calling a tool that might hit a plan gate (aiAdvanced, automations, governance, etc.) so you can fail fast or surface the gate to the user.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and non-open-world, so the safety profile is covered. The description adds value beyond them by disclosing that the flag map is 'plan defaults merged with admin overrides' and that the read is scoped to the caller org, which explains why no parameters are needed.

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: the return payload first, then the usage condition. The field enumeration is dense but every listed field earns its place because there is no output schema to carry it.

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

Completeness4/5

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

With no output schema, the description usefully enumerates the returned fields, and annotations carry the safety profile, so an agent has what it needs. Minor residual gaps (shape of the feature-flag map, behavior for an org with no plan/trial) keep it just short of full completeness.

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

Parameters4/5

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

The tool takes zero parameters, so by the rubric baseline is 4; the description correctly implies a no-argument, caller-scoped read. There are no parameters for it to add syntax or format detail to.

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 enumerates the exact resource set (plan code, display name, resolved feature flag map, trial end, billing interval), which goes well beyond restating the name. It does not explicitly name or distinguish itself from the nearby sibling get_plan, so it lands at clear-but-undifferentiated rather than 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 Guidelines4/5

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

Gives an explicit trigger — call it before invoking a tool that may hit a plan gate (aiAdvanced, automations, governance) — plus the rationale (fail fast or surface the gate). It stops short of naming a concrete alternative tool or a when-not-to-use condition, so it is strong context without full routing guidance.

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

get_portfolioA
Read-onlyIdempotent
Inspect

Get one portfolio with its in-scope projects. Returns owner, project summaries, and a hiddenProjectCount for projects the caller cannot see (org.project.view.all gated). A project whose cost the caller may not read has budget null and costHidden true. Archived projects are left out, as on the portfolio page. Requires the BUSINESS+ portfolios plan feature.

NameRequiredDescriptionDefault
portfolioIdYesPortfolio id

TDQS

A4.3/5.0
Behavior5/5

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

Annotations cover read-only/idempotent safety, but the description adds substantial behavior beyond that: the org.project.view.all-gated hiddenProjectCount, the budget=null / costHidden=true masking rule for unreadable costs, exclusion of archived projects, and a plan-tier requirement. These 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.

Conciseness5/5

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

Four dense sentences, each carrying distinct information, front-loaded with what the tool returns before the gating details. 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.

Completeness5/5

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

With no output schema, the description carries the return-value burden and does so: it enumerates owner, project summaries, hiddenProjectCount, and the budget/costHidden masking semantics. Nothing material for correct invocation is missing.

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

Parameters3/5

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

Schema coverage is 100% and the single portfolioId parameter is documented in the schema as 'Portfolio id'. The description adds no format, source, or lookup guidance for it, 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 one portfolio with its in-scope projects') and immediately scopes the response contents. This clearly differentiates it from the plural list_portfolios and the aggregate portfolio_summary siblings.

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

Usage Guidelines3/5

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

The singular 'one portfolio' implies single-target retrieval versus the list sibling, but the description never explicitly says when to use this over list_portfolios or portfolio_summary. The BUSINESS+ plan requirement is a useful precondition, though it's a gating constraint rather than usage guidance.

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

get_projectA
Read-onlyIdempotent
Inspect

Get full detail on one project (team, milestones, task counts) by id. Use this after list_projects to resolve a name → id and pull enough context to reason about the project without a follow-up call. The caller can only see projects they own, are a member of, or have org-admin visibility for - out-of-scope ids return not_found. PREFER get_plan when you need the FULL task tree (epics + sprints + tasks + deps + milestones in one call); this tool returns only headline data. autoSchedule false means the project has automatic scheduling off: an edit or a new link moves no other task until someone presses Recalculate. parentDatesFromSubtasks true means a task with subtasks takes its dates from them unless the task says otherwise (each task reports datesFromSubtasks). retainedLogic true means the remaining work of a started task waits on its links, so a late predecessor pushes it; false means a started task holds. archivedAt set means the project is archived and read-only: every write to it is refused (PROJECT_ARCHIVED) until it is unarchived.

NameRequiredDescriptionDefault
projectIdYesProject id from list_projects.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description goes well beyond them. It discloses the ownership/membership/org-admin visibility scope, the not_found behavior for out-of-scope ids, and the archived read-only state that causes every write to fail with PROJECT_ARCHIVED. It also explains the three settings flags (autoSchedule, parentDatesFromSubtasks, retainedLogic), which an agent would otherwise have to guess 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?

Purpose and the list_projects/get_plan routing are front-loaded, and every later sentence carries real information about return-field semantics. The final flags sentence chain is dense (autoSchedule, parentDatesFromSubtasks, retainedLogic) and reads like documentation prose, but given the absence of an output schema it is earned rather than 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, so the description has to explain the return shape itself, and it does: headline data only, plus the meaning of autoSchedule, parentDatesFromSubtasks, retainedLogic, and archivedAt. Combined with the visibility and archived-state warnings, an agent has enough to interpret the response and avoid a follow-up call or a rejected write.

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

Parameters3/5

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

There is a single parameter with 100% schema description coverage, so the schema already documents 'Project id from list_projects.' The description reinforces the id's origin and adds that out-of-scope ids yield not_found, but offers no format or validation detail beyond what the schema provides. That is the expected baseline for a fully documented single 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?

The first sentence gives a specific verb and resource ('Get full detail on one project ... by id') and previews the payload (team, milestones, task counts). It also names the sibling it is not: get_plan returns the full task tree, while this returns only headline data, so an agent can route between 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?

It states the workflow position ('use this after list_projects to resolve a name → id'), the explicit alternative ('PREFER get_plan when you need the FULL task tree'), and the visibility rule with a concrete failure mode ('out-of-scope ids return not_found'). When to use, when not to use, and what happens on miss are all spelled out.

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

get_project_historyA
Read-onlyIdempotent
Inspect

Get field-level change history for one project. PREFER get_project for current state.

NameRequiredDescriptionDefault
limitNoMax revisions to return (1-50, default 20).
cursorNoLast revision id for cursor-based pagination.
projectIdYesProject id from list_projects or get_project.

TDQS

A4/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 the safe-read profile is covered structurally. The description adds 'field-level change history' scope, which is useful, but says nothing about pagination behavior or what a revision record contains. With annotations carrying safety, a 3 is appropriate.

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

Conciseness5/5

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

Two short sentences, zero waste, with the core purpose front-loaded and the sibling routing immediately after it.

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

Completeness4/5

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

For a read-only history tool with full schema coverage and annotations covering the safety profile, the description is nearly sufficient. It could optionally note pagination/return shape, but no output schema exists and the essential call guidance 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 limit, cursor and projectId are already documented in the schema. The description adds no format, syntax or default details beyond what the schema provides, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('field-level change history for one project'), and explicitly contrasts with get_project for current state. An agent can distinguish it from get_project and from other *_history siblings by resource 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?

'PREFER get_project for current state' gives an explicit alternative and the condition that selects it. It stops short of stating when-not-to-use in a broader sense (e.g. vs other history tools), so it is clear context without full exclusion coverage.

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

get_project_velocityA
Read-onlyIdempotent
Inspect

Compute a project's task-completion velocity over the last 35 days. Returns lastWeek count, fourWeekAvg, driftPct (negative = slowing), and a 5-bucket breakdown (oldest to newest). Caller must have project access. Use this when the user asks about a project's pace, when investigating a VELOCITY_DRIFT governance signal, or before suggesting actions on a project (so the model knows whether the team is keeping up).

NameRequiredDescriptionDefault
projectIdYesProject to compute velocity for.

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. The description adds meaningful context beyond annotations: the caller must have project access, and driftPct is negative when slowing, which clarifies output interpretation.

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 purpose, then return values, access, and usage guidance. Each sentence adds useful information without repetition or 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 simple read-only analytical tool with one fully documented parameter and no output schema, the description supplies purpose, return fields, drift interpretation, access requirement, and usage guidance. Nothing essential 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% for the single projectId parameter. The description adds an access prerequisite but no additional parameter format or constraint details, so the baseline 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb and resource: compute a project's task-completion velocity over the last 35 days. It distinguishes itself from generic project-read tools by naming the exact metric and time window.

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 contexts: when the user asks about pace, when investigating a VELOCITY_DRIFT governance signal, or before suggesting project actions. It does not name alternatives or when-not-to-use conditions, so it falls short of a full 5.

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

get_proposalA
Read-onlyIdempotent
Inspect

Get full detail on one governance proposal: business case fields, reviews, gate approvals (per-reviewer quorum rows, the current review round of each gate), criteria scores, sponsor, submitter, linked project (if APPROVED + bootstrapped). Visibility: reviewers (org.governance.review) see all; non-reviewers see only their own submissions. Out-of-scope proposalIds return not_found.

NameRequiredDescriptionDefault
proposalIdYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds genuinely new behavior: permission-based visibility scoping by role (org.governance.review) and the not_found outcome for out-of-scope IDs, which the agent cannot infer from structured data.

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

Conciseness4/5

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

Front-loaded with the verb and scope, then a dense but purposeful enumeration of returned contents, followed by visibility and error behavior. Every clause carries information, though the long parenthetical and run-on comma list make it slightly heavy to parse.

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

Completeness5/5

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

With no output schema, the description carries the burden of describing return values and does so thoroughly (reviews, quorum rows, current gate review round, criteria scores, linked project condition). Combined with the permission model and not_found behavior, an agent has everything needed to call and interpret it correctly.

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

Parameters3/5

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

Schema coverage is 0% and the description never documents the proposalId format or source. The only parameter-related value it adds is that out-of-scope proposalIds yield not_found, which hints at ID scoping but does not compensate for the missing format detail. With a single self-evident parameter, this remains minimum-viable.

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 one governance proposal) and enumerates exactly what full detail comprises: business case fields, reviews, gate approvals with per-reviewer quorum rows, criteria scores, sponsor/submitter, and linked project. This enumeration implicitly distinguishes it from siblings like list_proposals, list_proposal_reviews, and list_gate_approvals by showing it aggregates them for a single proposal.

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 visibility clause ('reviewers see all; non-reviewers see only their own submissions') and the 'out-of-scope proposalIds return not_found' note give clear contextual guidance on what happens when called. It does not, however, explicitly name alternatives such as list_proposals or get_proposal_history or state a when-to-use condition, 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.

get_proposal_historyA
Read-onlyIdempotent
Inspect

Get field-level change history for one proposal. Requires governance access.

NameRequiredDescriptionDefault
limitNoMax revisions to return (1-50, default 20).
cursorNoLast revision id for cursor-based pagination.
proposalIdYesProposal id to retrieve history for.

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 genuinely new behavioral context: the data granularity (field-level changes) and the governance-access requirement, which is an auth constraint not present in any structured field. It stops short of describing pagination semantics, which the schema handles.

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 no filler. The purpose and the access prerequisite are front-loaded, and every clause 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 read-only history tool with full schema coverage and no output schema, the description covers purpose, scope, and the access gate. Return format is left unspecified, but that is a minor gap given the tool's simplicity and 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.

Parameters3/5

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

Schema description coverage is 100%, with limit, cursor, and proposalId each documented in the schema, including the 1-50 range and default. The description adds no parameter-level detail, so the baseline of 3 applies.

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

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 field-level change history') plus the scope restriction ('for one proposal'), which is more precise than a generic 'get history'. It does not explicitly distinguish itself from near-identical siblings like get_project_history, get_task_history, or get_change_request_history, but the resource noun does most of that 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 gives a precondition ('Requires governance access') but no when-to-use versus alternatives guidance and no exclusions. Usage is implied by the resource name rather than stated, so it lands at minimum-viable.

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

get_readiness_statusA
Read-onlyIdempotent
Inspect

Read one project's live readiness to be completed (or archived): every criterion that applies, the result of each auto check (pass, fail or unknown), the stored state and owner of each manual or ai item, active waivers, the required gaps, whether the project is ready, the organization's enforcement mode (OFF, WARN or BLOCK) and the last recorded check. Changes nothing and records nothing. Any caller who can read the project.

NameRequiredDescriptionDefault
projectIdYes
transitionNoCOMPLETE (the default) checks the criteria for completing the project; ARCHIVE the criteria for archiving it.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint=false), so the bar is lower. The description still adds value by disclosing the full response surface, the state/owner/waiver semantics, and an authorization condition ('Any caller who can read the project'); 'records nothing' mildly extends readOnlyHint by implying no audit trace.

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

Conciseness4/5

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

Front-loaded with the core verb+resource, then a dense enumeration of returned fields, then two terse constraints. The middle clause is long but every item earns its place given there is no output schema; it could be split for readability.

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

Completeness4/5

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

With no output schema, enumerating the return contents (criterion results, waivers, gaps, readiness flag, enforcement mode, last check) is essential and done well. A read-only tool with annotations and an access note is largely complete; missing only edge cases (unknown project, empty readiness) which are minor here.

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

Parameters3/5

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

Schema description coverage is 50%: the 'transition' enum is fully documented in the schema, and projectId is undocumented but self-evident. The description's '(or archived)' echoes the transition meaning but adds no syntax or constraint 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 ('Read') and resource ('one project's live readiness to be completed or archived') and enumerates the returned content, so an agent knows exactly what it gets. It does not explicitly contrast with siblings like run_readiness_check or list_readiness_criteria, so it falls short of full sibling differentiation.

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

Usage Guidelines3/5

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

Usage is implied by 'live readiness' and 'Changes nothing and records nothing', which signals a read versus a compute/run, but no explicit when-to-use, when-not, or named alternative (e.g. run_readiness_check) is given. The access condition ('Any caller who can read the project') is the only guard rail.

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

get_row_historyA
Read-onlyIdempotent
Inspect

Get cell-level change history for one list row. Available for rows in any list the caller can open, including organization-level lists.

NameRequiredDescriptionDefault
limitNoMax revisions to return (1-50, default 20).
rowIdYesWorkspace row id to retrieve history for.
cursorNoLast revision id for cursor-based pagination.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered by structure. The description adds one genuinely new behavioral fact — visibility across any list the caller can open, including org-level lists — but says nothing about how revisions are surfaced, ordering, or retention, which the annotations do not cover.

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

Conciseness5/5

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

Two short sentences with zero filler; the core purpose is front-loaded and the scope caveat follows immediately. 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.

Completeness3/5

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

No output schema exists, so the description carries the burden of describing what a revision looks like (who changed which cell, when, old vs new value) and it does not. For a simple, annotated read tool this is adequate but leaves the return shape to inference.

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%: rowId, limit (1-50, default 20) and cursor pagination are all documented in the schema itself. The description's "one list row" echoes rowId but adds no format or syntax detail, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb (get), resource (change history) and granularity (cell-level) scoped to one list row, which no sibling duplicates — the other *_history tools cover tasks, documents, projects, issues and proposals. It is clear and unambiguous, though it never explicitly contrasts itself with those siblings to help the agent route.

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?

"Available for rows in any list the caller can open, including organization-level lists" sets the access scope but is a permission statement, not usage guidance. There is no explicit when-to-use / when-not-to-use or alternative named; the intent (call this to inspect a row's revision log) is only implied.

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

get_schedule_riskA
Read-onlyIdempotent
Inspect

Read the Monte Carlo schedule risk runs of a project. Returns the newest run (status QUEUED, RUNNING, DONE or FAILED) and, when that run is not finished, the newest finished run. A finished run carries a summary: the P50, P80 and P90 finish dates, the plan date (the latest stored task finish, as the Gantt shows it) and its chance of being met, the finish as the links schedule it, the target date and its chance when one was set, and how many risk events were sampled. includeResult=true adds the whole stored result of the finished run (finish histogram and curve, milestone dates, task criticality and duration sensitivity). runId reads one run by id instead. Read-only; runs are started from the project Risks tab or the REST API.

NameRequiredDescriptionDefault
runIdNoOptional. One run of this project by id, in place of the newest.
projectIdYes
includeResultNoDefault false. Adds the whole stored result of the finished run.

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description goes well beyond that with genuinely new behavior: it discloses the run statuses (QUEUED/RUNNING/DONE/FAILED), the fallback rule that the newest finished run is also returned while a run is unfinished, the exact contents of the summary, and what includeResult expands into. It also preempts a likely misuse by noting runs are started elsewhere.

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

Conciseness4/5

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

Purpose and the newest-run behavior are front-loaded, and the dense middle covers return shape efficiently in one sentence each. It is a long description, but nearly every clause carries information an agent needs; only the parenthetical explanation of the plan date is mildly expendable.

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

Completeness5/5

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

With no output schema, the description carries the full burden of describing return values, and it does so thoroughly: statuses, the dual-run fallback, every summary field, and the includeResult payload. Combined with annotations covering safety, 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.

Parameters4/5

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

Schema coverage is 67% (runId and includeResult documented, projectId bare). The description enriches the schema rather than repeating it: includeResult is expanded from 'Adds the whole stored result' into a concrete list (finish histogram and curve, milestone dates, task criticality, duration sensitivity), and runId's replace-the-newest semantics are restated as a behavioral rule.

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

Purpose4/5

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

States a specific verb and resource: 'Read the Monte Carlo schedule risk runs of a project,' and enumerates what comes back (P50/P80/P90, plan date chance, target date chance, sampled events). This is far more precise than a generic get, but it never names or contrasts a sibling tool such as analyze_project_risks or schedule_health_check, so an agent must infer differentiation from the resource alone.

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?

Clear context for use: it reads stored runs, and the closing sentence 'runs are started from the project Risks tab or the REST API' implicitly tells the agent this tool cannot start a run. It also explains the runId switch ('reads one run by id instead'). However, no explicit when-not condition or named alternative tool is given for cases where the agent wants a new run or a different risk view.

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

get_seat_countA
Read-onlyIdempotent
Inspect

Read the caller org's seat-count breakdown: active members, deactivated members, agent-persona count, per-role tallies, GUEST count, free-guest allowance per plan, and the resulting billable seat count (the figure Stripe meters on, max with floor of 1). Active = OrganizationMember.isActive true (CLAUDE.md note 79). billableSeats EXCLUDES agent personas (an agent is not a billable human seat), mirroring the real billing path (routes/billing.ts).

NameRequiredDescriptionDefault

No parameters

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/openWorld=false, so the bar is lower, yet the description still adds real behavioral semantics: the definition of Active (OrganizationMember.isActive true), the rule that billableSeats EXCLUDES agent personas, and the max-with-floor-of-1 computation. That is domain behavior an agent could not infer from annotations or the empty 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 full field list, then two supporting sentences on the Active rule and the billableSeats exclusion; every clause carries information. The inline code citations ('CLAUDE.md note 79', 'routes/billing.ts') are more traceability than agent-facing guidance, a minor structural cost.

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 carries the return-value burden and does so thoroughly by enumerating every reported figure and the semantics of the key one (billableSeats). Combined with annotations covering the safety profile and zero parameters, 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.

Parameters4/5

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

The tool takes zero parameters, so the baseline of 4 applies. The description correctly adds nothing about arguments, and the empty schema (additionalProperties false) is consistent with the description's account of a parameterless read.

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 ('caller org's seat-count breakdown') and then enumerates the exact fields returned, so an agent knows precisely what comes back. It never names a sibling or draws a boundary against look-alikes such as get_plan, get_plan_features, get_my_quota_usage or list_org_members, so it stops 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: the note that billableSeats is 'the figure Stripe meters on' and that it mirrors 'the real billing path' signals this is the tool to call for authoritative billing counts. There is no explicit when-to-use/when-not-to-use statement and no mention of alternatives for org-membership or plan questions.

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

get_sprintA
Read-onlyIdempotent
Inspect

Full detail on one sprint incl. linked tasks (id/title/status/assigneeId/collaborators/progress). Plan gate: sprints (PRO+).

NameRequiredDescriptionDefault
sprintIdYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the burden is light. The description adds the PRO+ plan-gate requirement and describes the linked-task payload it returns, both of which go beyond what annotations declare.

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 fragments, front-loaded with the core purpose and then the gating constraint. No wasted words.

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

Completeness4/5

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

No output schema exists, and the description compensates by listing the returned linked-task fields. Combined with the plan-gate disclosure, an agent has what it needs to call and interpret 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?

There is a single required sprintId parameter with 0% schema description coverage, so the description is the only source of semantics — but it says nothing about the id's format or source. With one param this is an acceptable minimum, not a strength.

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 ('get') and resource ('one sprint') and enumerates the linked-task fields returned. It naturally contrasts with the sibling list_sprints and update_sprint, though it never names them 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 'Plan gate: sprints (PRO+)' note tells the agent a prerequisite, which is useful context for when the call will succeed. However, there is no guidance on when to reach for this versus list_sprints or update_sprint, 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.

get_subtreeA
Read-onlyIdempotent
Inspect

Return a task and all its descendants up to a given depth. Use this when you have a root task id and want parent + children + grandchildren in one call. PREFER get_plan when you need the whole project tree; PREFER list_tasks(parentId) when you want exactly one level. Caps: maxDepth ≤ 5 (default 3), total nodes ≤ 200. Each node carries title / description / status / priority / progress / dueDate / assignee / collaborators / isMilestone / updateRevision (+ agentBrief when includeAgentBrief=true). The response also returns totalDescendants (the full count under the root, ignoring the caps) so you can tell when the tree was truncated.

NameRequiredDescriptionDefault
maxDepthNoDefault 3, max 5. Root is depth=0.
rootTaskIdYesThe root task whose subtree you want.
includeAgentBriefNoDefault false. Include agentBrief on each node.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations cover the safety profile (read-only, idempotent, non-destructive), and the description still adds substantial behavioral context: depth and node caps, the truncation signal via totalDescendants, the exact node fields returned, and the agentBrief toggle. This is well beyond what the annotations provide.

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

Conciseness5/5

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

Front-loads purpose, then routing alternatives, then caps and return shape. The field enumeration is dense but directly tells the agent what it receives, so every sentence earns its place.

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

Completeness5/5

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

For a hierarchy-fetch tool with no output schema, the description covers purpose, alternatives, caps, truncation detection, and returned fields, which is 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.

Parameters3/5

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

Schema coverage is 100% and the schema already documents default=3, max=5, root depth=0, and includeAgentBrief behavior. The description mostly repeats those defaults, adding only the global 200-node cap and a restatement of agentBrief, so baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb and resource ('Return a task and all its descendants up to a given depth') and explicitly distinguishes itself from siblings by name (get_plan for the full tree, list_tasks for one level). An agent can select it correctly without opening any schema.

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

Usage Guidelines5/5

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

Gives an explicit use case ('when you have a root task id and want parent + children + grandchildren in one call') and names the two alternative tools with the exact conditions that select them. No routing decision is left to inference.

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

get_taskA
Read-onlyIdempotent
Inspect

Get full detail on one task by id (subtasks, dependencies, recent comments). Caller must have visibility into the parent project. Out-of-scope task ids return not_found. PREFER read_agent_brief when you have just claimed a task and want only the brief-relevant context; PREFER get_subtree when you need this task PLUS its descendants. §Y1: returns the shared task shape: id, title, description, status, priority, dates, progress, parent/epic/sprint, assignee + createdBy + updatedBy (each with isAgentPersona), collaborators (people working on the task besides its assignee), tags, customFields, agentBrief, isMilestone, updateRevision, claimRevision, isManual and datesFromSubtasks (true when the start and due dates come from the subtasks, so a date edit on the task is refused with PARENT_DATES_FROM_SUBTASKS).

NameRequiredDescriptionDefault
taskIdYesTask id from list_tasks.

TDQS

A4.6/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, and the description adds value beyond them: the visibility precondition, the not_found outcome for out-of-scope ids, and the datesFromSubtasks flag plus the resulting PARENT_DATES_FROM_SUBTASKS refusal on date edits. These are real behavioral constraints not derivable from annotations.

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

Conciseness4/5

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

Front-loads the verb+resource, then the disambiguation directives, then the return-shape block. The §Y1 field enumeration is long but each clause carries information (field list, collaborator definition, date-source semantics). Slightly dense, but no filler sentences.

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

Completeness5/5

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

With no output schema, the description compensates by enumerating the returned shared task shape and explaining non-obvious fields (collaborators, isManual, datesFromSubtasks). Combined with the access and error semantics, 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 the single parameter already documents that the id comes from list_tasks. The description does not add syntax or format detail beyond that, so the baseline 3 applies for a single well-documented 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?

Opens with a specific verb+resource+scope: 'Get full detail on one task by id (subtasks, dependencies, recent comments)'. It explicitly distinguishes itself from two siblings (read_agent_brief, get_subtree) so an agent can select it without opening any schema.

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

Usage Guidelines5/5

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

Gives explicit routing rules: PREFER read_agent_brief after claiming a task, PREFER get_subtree when descendants are needed. Also states the access prerequisite (caller must have visibility into the parent project) and the failure mode for out-of-scope ids (not_found).

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

get_task_historyA
Read-onlyIdempotent
Inspect

Returns field-level change log for one task. Agents use this to check if a task was recently modified before claiming or updating it. PREFER get_task when you only need current state.

NameRequiredDescriptionDefault
limitNoMax revisions to return (1-50, default 20).
taskIdYesTask id from list_tasks or get_task.

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already cover read-only, idempotent, non-destructive, and closed-world behavior. The description adds that it returns a change log (historical data) and its intended use, but does not disclose return format, ordering, pagination, or completeness of the log. With rich annotations, this is adequate but not rich behavioral context.

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

Conciseness5/5

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

Three sentences, front-loaded with the core purpose and followed by usage guidance and alternative routing. No wasted words; every sentence 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?

For a simple read-only tool with rich annotations and full schema coverage, the description is nearly complete. It states purpose, usage, and alternative, but does not elaborate on the return structure (e.g., what fields the log contains), which is the main output. Still, 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 coverage is 100%, so both parameters (taskId and limit) are fully documented in the schema. The description adds no additional meaning beyond what the schema provides, so the baseline of 3 applies.

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

Purpose5/5

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

States a specific verb ('Returns'), resource ('field-level change log for one task'), and distinguishes from the sibling get_task by noting when to prefer it. An agent can immediately tell this is the historical change log tool, not the current-state tool.

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

Usage Guidelines5/5

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

Explicitly says when to use it ('before claiming or updating it') and names the alternative ('PREFER get_task when you only need current state'). This gives clear routing between the two tools.

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

get_teamA
Read-onlyIdempotent
Inspect

Full team detail incl. all members (userId, name, role). Members may be deactivated org members — list_org_members for activity flags.

NameRequiredDescriptionDefault
teamIdYes

TDQS

A3.6/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 real context beyond them: that member lists can include deactivated org members, a data-quality caveat an agent would not otherwise know. It does not add pagination or return-shape details, but the caveat is meaningful.

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 padding; the core purpose (full team detail plus members) is front-loaded, followed by the noteworthy member caveat and the alternative pointer. Every clause carries information.

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

Completeness4/5

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

For a simple single-parameter read tool with annotations covering safety and no output schema, the description adequately conveys what comes back (team detail and member records with fields). The only real gap is the undocumented teamId format, which keeps it short of full completeness.

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% and teamId is undocumented in both the schema and the description. The description never explains what identifier form teamId takes (opaque ID, slug, name) or where to obtain it, so it fails to 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?

Specific verb+resource: retrieves full detail for one team, explicitly including all members and the member fields returned (userId, name, role). This distinguishes it from list_teams (enumerate) and list_team_members (members only), though it never names those siblings directly, 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 Guidelines3/5

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

Points to list_org_members as the alternative when activity flags are needed, which is genuine routing guidance for a sub-case. However, it never states the primary when-to-use condition or contrasts with list_team_members/list_teams, so the agent must infer the main selection logic.

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

get_templateA
Read-onlyIdempotent
Inspect

Full template detail incl. snapshot JSON (tasks blueprint + defaultDuration). Visible: this org's templates plus globally-public ones. Plan gate: templates (PRO+).

NameRequiredDescriptionDefault
templateIdYes

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 (readOnlyHint=true, idempotentHint=true, destructiveHint=false), so the bar is lower. The description adds genuinely new behavior: the visibility boundary (org + globally public), the plan gating requirement (PRO+), and the fact that the snapshot JSON contains a tasks blueprint and defaultDuration. It doesn't say what happens when the template is missing or inaccessible.

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 telegraphic clauses, each carrying distinct information, with the payload description front-loaded and the constraints trailing. 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, so the description must carry return-value meaning — and it does, naming the snapshot JSON contents. Combined with the visibility and plan-gate notes, an agent has enough to call this correctly, though error/absence behavior is 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?

One parameter with 0% schema description coverage, so the description must compensate. It clarifies which template IDs are resolvable via the visibility statement but adds no format, prefix, or sourcing guidance for templateId itself. Adequate, not enriched.

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 the resource and depth of retrieval precisely: "Full template detail incl. snapshot JSON (tasks blueprint + defaultDuration)." This implicitly distinguishes it from list_templates, which returns summaries, and names the concrete payload it adds. It is a noun phrase rather than a verb+object, but the intent is unmistakable.

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

Usage Guidelines3/5

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

Gives useful operational context — visibility scope ("this org's templates plus globally-public ones") and a plan gate ("templates (PRO+)") — but never explicitly says when to use this versus list_templates or instantiate_template. Usage is implied from the word "Full" rather than stated.

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

get_user_inputA
Idempotent
Inspect

Poll the status of a prompt previously created via request_user_input. Returns the current status (PENDING / ANSWERED / CANCELLED / TIMED_OUT) plus answer text when ANSWERED. Stale prompts (now > timeoutAt) flip to TIMED_OUT inline on poll, no separate cleanup pass needed. Agents should poll on a backoff (e.g. 5s, 10s, 30s, 60s).

NameRequiredDescriptionDefault
requestIdYesThe id returned by request_user_input.

TDQS

A4.5/5.0
Behavior5/5

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

The description explains a genuinely non-obvious behavior: a poll can mutate state by flipping stale prompts to TIMED_OUT inline, which justifies the readOnlyHint=false annotation rather than contradicting it. It also enumerates the terminal status states and the backoff expectation, adding real 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?

Four tight sentences, each carrying distinct information: purpose, return states, timeout mutation semantics, and polling cadence. The most surprising fact (inline TIMED_OUT flip) is stated before the operational advice, so it is well 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?

There is no output schema, so the description carries the return-value burden and does so: it names the status values and the answer text behavior. For a single-parameter polling tool this is complete; 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?

Only one parameter, and schema description coverage is 100%, so the schema already documents requestId. The description adds no format, length, or provenance detail beyond naming request_user_input as the source of the id, which is the expected baseline for a fully covered single 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?

Specific verb (poll) plus specific resource (status of a prompt created via request_user_input), and it explicitly names the sibling tool that creates the prompt. An agent can distinguish it from every other get_* 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?

The description states the operational context clearly: this tool is only for prompts created by request_user_input, and it prescribes a backoff cadence (5s, 10s, 30s, 60s), which is actionable guidance. It stops short of stating exclusions or alternatives, but for a poll tool with a single upstream creator there is little else to route to.

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

get_webhookA
Read-onlyIdempotent
Inspect

Get one webhook by id. Returns metadata but NOT the secret value (hasSecret boolean only — never echo a secret over MCP). Plan gate: webhooks (BUSINESS+).

NameRequiredDescriptionDefault
webhookIdYes

TDQS

A4.3/5.0
Behavior5/5

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

Adds substantial context beyond the annotations: it discloses that the secret is never returned (hasSecret boolean only, 'never echo a secret over MCP') and states the plan prerequisite (BUSINESS+). These are behavioral constraints the readOnly/idempotent hints do not convey.

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

Conciseness5/5

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

Three compact sentences, each earning its place: identity/scope first, the security behavior second, and the gating prerequisite last. No filler.

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

Completeness5/5

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

For a single-parameter read tool with full annotation coverage and no output schema, the description closes the two gaps an agent actually needs: what is returned (metadata, no secret) and the plan gate required to call it.

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

Parameters3/5

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

Schema coverage is 0% for the single webhookId parameter, so the schema offers no meaning. The description compensates only minimally by implying the parameter is an id; it adds no format, lookup, or error 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 with scope: 'Get one webhook by id.' The 'one ... by id' framing distinguishes it from the sibling list_webhooks without needing to name it 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 the get-by-id shape (you already have a webhookId), but the description never states when to prefer this over list_webhooks or when a webhook is unavailable, 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.

get_whiteboardA
Read-onlyIdempotent
Inspect

Get a whiteboard incl. Excalidraw elements (array) + appState. Use update_whiteboard with elements to commit changes; version bumps on each write. Plan gate: whiteboards (PRO+).

NameRequiredDescriptionDefault
whiteboardIdYes

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 bar is low, yet the description adds real context: the plan gate ('whiteboards (PRO+)') and the versioning behavior ('version bumps on each write'). These are useful auth and concurrency facts not present in the annotations.

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

Conciseness5/5

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

Three compact clauses, front-loaded with the return payload, then the write-path pointer, then the access constraint. No sentence 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?

No output schema exists, so the description carries the return-value burden and does so by naming elements and appState. It also flags the plan requirement. The only missing piece is guidance on obtaining whiteboardId.

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 0% for the single whiteboardId parameter, and the description never says where the ID comes from (e.g., list_whiteboards) or its format. With a lone, name-obvious parameter the gap is minor, but the description adds no meaning beyond the schema field name.

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 (Get) and resource (whiteboard) plus the exact return payload (Excalidraw elements array + appState). An agent can separate it from list_whiteboards (discovery) and update_whiteboard (mutation) 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?

Explicitly routes the write path: 'Use update_whiteboard with elements to commit changes,' which clarifies this tool is read-only. It does not, however, say when to use this vs. list_whiteboards for discovering IDs, so one alternative is left implicit.

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

get_wiki_pageA
Read-onlyIdempotent
Inspect

Get a single wiki page: metadata (title, icon, parent, order) + a read-only plaintext rendering of the body so you can read what the page says. The body is a Y.js collab doc — it can be READ here but only EDITED in the live editor (update_wiki_page changes metadata only). Plan gate: wikis (PRO+).

NameRequiredDescriptionDefault
pageIdYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), but the description adds real value beyond them: the body is a Y.js collab doc exposed only as a read-only plaintext rendering, editability is restricted to the live editor, and a PRO+ plan gate applies. It does not cover failure modes (e.g. page not found or plan-gate error behavior), 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.

Conciseness4/5

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

Three sentences, front-loaded with what is returned and a tight read/write disambiguation; the plan gate is tacked on the end but is short. No filler, though the parenthetical field list is slightly dense.

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

Completeness4/5

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

With no output schema, the description carries the burden of describing returns and does so adequately (metadata fields + plaintext rendering), plus it discloses the plan gate and the yDocState limitation. What is missing is guidance on the pageId source and error/permission behavior.

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

Parameters3/5

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

Only one parameter (pageId) with 0% schema description coverage, and the description gives no hint about its format or where to obtain it (e.g. list_wiki_pages). With a single obvious identifier parameter the gap is minor, so 3 rather than lower.

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 single wiki page') and enumerates exactly what is returned: metadata fields (title, icon, parent, order) plus a plaintext body rendering. This clearly distinguishes it from list_wiki_pages and update_wiki_page 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?

Explains the read use case and pre-empts a common mistake by stating the body can only be EDITED in the live editor, since update_wiki_page changes metadata only. It does not name list_wiki_pages as the way to resolve pageId, so the routing back to retrieval of the identifier is left implicit.

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

get_workflowB
Read-onlyIdempotent
Inspect

Full workflow definition: trigger ({event, condition}), graph (steps array with kind + label + next + config), schedule ({cron, timezone}), runCount/maxRuns. Plan gate: automations (PRO+).

NameRequiredDescriptionDefault
workflowIdYes

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/openWorld=false, so the safety profile is covered. The description adds genuinely new context: the shape of the returned payload (trigger, graph, schedule, runCount/maxRuns) and a plan-gate requirement for automations, which an agent needs before calling.

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

Conciseness4/5

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

One front-loaded sentence with no filler; the parenthetical field notation is compact. The terse bracket syntax ({event, condition}, {cron, timezone}) is efficient but borders on cryptic without a legend.

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

Completeness4/5

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

With no output schema, the description usefully sketches the return structure, and the plan gate covers access requirements. It omits where a workflowId comes from (e.g., list_workflows) and any error behavior, leaving minor gaps for a simple single-parameter read.

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% and the single required parameter workflowId is undocumented in both the schema and the description. The description describes return fields rather than the identifier, so it fails to compensate for the coverage gap even though the parameter is largely self-evident from its name.

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_workflow' → 'Full workflow definition') and enumerates the constituent parts of what is returned. It does not distinguish itself from near-siblings like get_workflow_run, list_workflows, or design_workflow_draft, so an agent must infer the boundary from the name alone.

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

Usage Guidelines2/5

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

There is no when-to-use guidance and no routing to alternatives; the only contextual note is the plan gate ('automations (PRO+)'), which is an access prerequisite rather than usage direction. The agent gets no signal on when to prefer this over list_workflows or get_workflow_run.

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

get_workflow_runA
Read-onlyIdempotent
Inspect

Full execution context for one workflow run: status, started / finished timestamps, step-run timeline, and approval decisions. PREFER list_workflow_runs to discover runs by workflow id or status; PREFER list_workflow_approvals for the caller's own approval inbox.

NameRequiredDescriptionDefault
runIdYesWorkflowRun id.

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, non-destructive and closed-world, so safety is covered structurally. The description goes beyond that by disclosing the payload contents (status, timestamps, step-run timeline, approval decisions), which is genuinely useful since there is no output schema. It stops short of covering auth requirements or pagination, hence not a 5.

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

Conciseness5/5

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

Two sentences, no filler. The returned-field inventory comes first and the routing guidance second, which is the correct front-loading for a detail-fetch tool. Every clause earns its place.

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

Completeness5/5

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

With no output schema and no output annotations, the description must tell the agent what comes back, and it does so concretely (status, timestamps, step timeline, approval decisions). Combined with the explicit sibling routing, an agent has everything needed to select and invoke 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?

There is a single required parameter, runId, and schema description coverage is 100% ('WorkflowRun id.'). The description adds no format, source, or lookup guidance for that id, so the schema carries the full burden. 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 ('Full execution context for one workflow run') and enumerates what that context contains: status, started/finished timestamps, step-run timeline, approval decisions. It also explicitly distinguishes itself from the two similarly-named siblings, so an agent can route correctly without opening any schema.

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

Usage Guidelines5/5

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

Names two concrete alternatives with the condition that selects each: 'PREFER list_workflow_runs to discover runs by workflow id or status' and 'PREFER list_workflow_approvals for the caller's own approval inbox.' That leaves the reader with a clear picture of when this single-run lookup is the right call versus the list tools.

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

get_working_calendarB
Read-onlyIdempotent
Inspect

Full working-calendar detail with every exception (holidays, special working days). workDays is a 0..6 day-of-week array (0=Sun).

NameRequiredDescriptionDefault
calendarIdYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already carry readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds useful output context (that all exceptions are included, and the workDays 0..6 Sunday=0 encoding), but says nothing about error behavior for a bad calendarId or pagination.

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

Conciseness4/5

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

Two tight sentences with no filler, and the completeness framing is front-loaded ahead of the encoding detail. Every sentence earns its place, though the workDays note could be seen as slightly tangential to selection.

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-param idempotent read with no output schema, the description supplies the missing return-shape information (exceptions plus the workDays encoding) and safety is covered by annotations. Nothing critical for correct invocation is absent.

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% and the sole parameter calendarId is never described in the description; the mention of workDays refers to an output field, not the input. The description therefore does not compensate for the coverage gap, though the param name is fairly self-evident.

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 ('Full working-calendar detail') and clarifies scope as 'every exception (holidays, special working days).' It's clear what the tool returns, though it never names the sibling list_working_calendars to differentiate the detail fetch from the 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 Guidelines3/5

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

Usage is only implied: the phrase 'Full ... detail' suggests this is the choice when the complete exception set is needed, versus the listed calendars. There is no explicit when-to-use, when-not, or reference to the list sibling, leaving routing largely to inference.

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

get_workspace_tableA
Read-onlyIdempotent
Inspect

Full workspace table incl. columns (id/name/colType/options/required/order) + rows + cells. For very large tables prefer paging through list_workspace_rows.

NameRequiredDescriptionDefault
tableIdYes

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 safety is covered. The description adds value beyond that by disclosing the exact return shape (columns + rows + cells) and warning about load for large tables, which the annotations do not convey.

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

Conciseness4/5

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

Two tight sentences, front-loaded with what is returned before the alternative. The column field enumeration is dense but informative; no sentence is wasted, though the run-on field list is slightly compressed.

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 carries the return-value burden and does describe the returned structure (columns with their fields, plus rows and cells). It leaves row/cell field detail unspecified, but for a read-scoped tool it covers what an agent needs 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 0% and the description never explains tableId. However, with a single self-evident parameter name and the schema carrying the type/required constraint, the cost is low, so baseline 3 is appropriate rather than a penalty.

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_workspace_table) and defines the returned scope precisely: columns, rows, and cells, with the column field list (id/name/colType/options/required/order). This clearly separates it from list_workspace_rows, which the description explicitly names.

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

Usage Guidelines4/5

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

Gives an explicit routing rule: for very large tables, prefer paging through list_workspace_rows. This is a real when-to-use-alternative signal, though it does not state the positive case (e.g. 'use when you need the complete table in one call') beyond implication.

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

implement_change_requestA
DestructiveIdempotent
Inspect

Mark an APPROVED change request as IMPLEMENTED. Caller must be a project Owner or Manager, or an org CCB member. Feature: changeControl (ENTERPRISE+).

NameRequiredDescriptionDefault
changeRequestIdYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations cover the safety profile (mutating, idempotent, destructive), and the description adds meaningful context on top: the required APPROVED state, the authorization requirement, and the ENTERPRISE+ feature gate. It does not explain failure behavior or why the operation is flagged destructive, but it clearly exceeds what the annotations alone 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, front-loaded sentences: action and target state first, then permissions, then feature gating. No filler or repetition.

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

Completeness4/5

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

For a one-parameter state-transition mutation with no output schema, the description covers the transition, authorization, and feature entitlement. It omits return/error semantics, but annotations already carry the safety profile, leaving only minor 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 coverage is 0% for the single changeRequestId parameter, so the description could have compensated but does not — no format or sourced-from hint (e.g., get_change_request / list_change_requests). The name is largely self-explanatory and the description ties it implicitly to an approved CR, so baseline 3 is appropriate.

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

Purpose5/5

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

Specific verb ('Mark ... as IMPLEMENTED') plus resource (change request) plus a precise state precondition (APPROVED). An agent can distinguish this from create_change_request, submit_change_request, submit_cr_review, and withdraw_change_request purely from the description.

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

Usage Guidelines4/5

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

States a clear precondition ('APPROVED') and the caller eligibility rule (project Owner/Manager or org CCB member), which effectively scopes when the tool may be used. It does not explicitly name sibling alternatives for other lifecycle stages, so it stops short of a 5.

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

import_sharepoint_list_projectsA
Idempotent
Inspect

Import a SharePoint list used as a project tracker into an Onplana portfolio, one project per row. Columns map to project fields (name, status, owner email, start and end dates, health, budget, description); unmapped columns become project custom fields only when named in customFieldColumns. An owner email that matches an org member owns the project; any other email is written on the project as a note and nobody is invited. Rows imported by an earlier run are skipped, so a re-run creates no duplicates. Pass dryRun: true to see the columns, the proposed mapping and the first rows as projects without writing anything. Requires the SharePoint permission on the connected Microsoft account.

NameRequiredDescriptionDefault
listIdNoThe list id. Give this or listName.
siteIdYesSharePoint site id, from list_sharepoint_sites.
mappingNoProject field to list column (internal name). Omit to use the proposed mapping from a dry run.
listNameNoThe list's display name, looked up on the site.
portfolioNameNoThe portfolio the projects go into; found by name or created. Required to import.
customFieldColumnsNoUnmapped column internal names to keep as project custom fields.

TDQS

A4.3/5.0
Behavior5/5

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

With annotations present, the description substantially exceeds them: it explains owner-email matching (org member owns project, others become a note and nobody is invited), custom-field behavior (only columns named in customFieldColumns), duplicate-skip semantics that reinforce idempotentHint, dry-run behavior, and the required SharePoint permission on the connected Microsoft account. This is rich behavioral disclosure beyond the annotation flags.

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 behavior, then the dry-run and permission notes; every sentence carries information. It is somewhat dense, but nothing is repetitive or 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 6-parameter, nested-schema import tool with no output schema, the description covers idempotency, dry-run, mapping semantics, owner handling, and auth requirements well. The dryRun reference that is not backed by the input schema leaves one calling detail inconsistent, keeping 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 description coverage is 100%, so the baseline is 3. The description does add real meaning for mapping (project field to list column) and customFieldColumns (unmapped columns kept only when named). However, it instructs 'Pass dryRun: true' even though dryRun is absent from the schema and additionalProperties is false, introducing a parameter mismatch that could cause an invalid call.

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 (Import) and resource (SharePoint list used as a project tracker) with scope (one project per row into an Onplana portfolio). This is clearly distinguishable from siblings like list_sharepoint_sites, preview_migration, and add_project_to_portfolio.

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 strong positive guidance: use dryRun to preview columns/mapping/rows without writing, and notes re-runs are safe because previously imported rows are skipped. It does not explicitly name an alternative tool (e.g. preview_migration) or state when not to use it, so it falls short of a 5.

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

initiate_closeoutA
Destructive
Inspect

Start the closeout of a completed or cancelled project: captures a final baseline ("Final closeout snapshot") and its EVM summary, writes the closeout report into the project's documents, and leaves the record in DRAFT. Called again while the closeout is DRAFT it recaptures both and rolls the report forward as a new version. Refused while the closeout is in review or signed off (CLOSEOUT_LOCKED) and on a project that is not completed or cancelled (PROJECT_NOT_CLOSED). Needs project.edit. Returns the same record get_closeout_status returns.

NameRequiredDescriptionDefault
projectIdYes

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the annotations: it discloses the mutation effects (baseline capture, document write, DRAFT state), the re-run semantics, the specific refusal conditions and error codes, and the required permission (project.edit). The destructiveHint=true annotation is consistent with a tool that writes documents and captures a baseline; no contradiction.

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

Conciseness4/5

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

Dense but front-loaded, leading with the core action before the re-entrancy and refusal details. Every sentence carries information (effects, re-run behavior, error codes, permission, return value), though the packing is heavy for a single-parameter tool.

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

Completeness5/5

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

No output schema exists, but the description explicitly says it returns the same record get_closeout_status returns, covering the return contract. Effects, preconditions, permissions, and failure modes are all present, so 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?

Only one parameter (projectId) with 0% schema description coverage, but the parameter is self-evident from the description's framing around 'a completed or cancelled project'. The description adds no explicit parameter syntax, but there is little to add for a single obvious identifier.

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 ('Start the closeout of a completed or cancelled project') and enumerates concrete effects: captures a final baseline, writes the closeout report, and leaves the record in DRAFT. An agent can distinguish this from siblings like get_closeout_status or submit_closeout_signoff without opening any schema.

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

Usage Guidelines5/5

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

Explicitly covers the re-entrant case ('Called again while the closeout is DRAFT it recaptures both and rolls the report forward as a new version') and the refusal cases with named error codes (CLOSEOUT_LOCKED when in review/signed off, PROJECT_NOT_CLOSED when the project is not completed or cancelled). It also points to get_closeout_status for the returned record.

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

insert_subprojectAInspect

Insert one project into another as a subproject: a read-only summary row at the inserted project's span, its tasks shown under it. Both projects must be in this workspace. The parent's schedule then finishes no earlier than the subproject; the subproject itself never moves for its parent. Refused when the project would insert itself or a project that already includes it. position places the row among the parent's top-level tasks by their order; omit it to add the row last. Access: edit the parent project and read the inserted one.

NameRequiredDescriptionDefault
positionNoOn the scale of the parent's top-level task order. Optional.
projectIdYesThe parent project.
insertedProjectIdYesThe project to insert.

TDQS

A4.6/5.0
Behavior5/5

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

With annotations only declaring the write/non-destructive profile, the description carries substantial behavioral weight: it explains the scheduling side effect (parent finish moves, subproject never moves), the read-only nature of the inserted row, the cycle-refusal rule, and the ordering semantics of insertion. This is exactly the mutation-effect context an agent needs before writing.

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?

Purpose comes first, then mechanics, then constraints, then the optional parameter and access requirement. Every sentence carries non-redundant information; there is 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.

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 would ideally say what is returned (the created subproject row or its id), which it does not. Otherwise it fully covers preconditions, side effects, refusal cases, and access — enough for correct invocation.

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 genuine meaning beyond the schema: `position` is defined on the parent's top-level task order and omitting it appends last, which the terse schema note ('On the scale of the parent's top-level task order. Optional.') does not make explicit. The parent/inserted relationship is also restated with role clarity.

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 ('Insert one project into another as a subproject') and immediately clarifies the resulting artifact — a read-only summary row at the inserted project's span with its tasks shown underneath. This distinguishes it from siblings like add_subtasks, link_dependency, and list_subprojects without needing to reference them by name.

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 preconditions ('Both projects must be in this workspace', 'Access: edit the parent project and read the inserted one') and explicit when-not cases ('Refused when the project would insert itself or a project that already includes it'). It stops short of naming alternative tools for adjacent operations (e.g., add_subtasks or link_dependency), so it is clear on context but not on alternatives.

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

instantiate_planAInspect

Build a complete project plan in Onplana in one call: the project, its tasks and subtasks, epics and risks, with a start and due date on every task. Fits "plan a website launch", "turn this goal into a project with tasks and dates" and "set up a project plan for our office move". A first draft written from the conversation is a valid plan; every task stays editable afterwards. Each task carries estimatedDays, and every task gets a start and due date computed from it, laid out one after another, so the project opens with a filled timeline. This call takes no predecessors; link_dependency adds them afterwards. By default it CREATES A NEW PROJECT for the plan. Pass projectId to add the plan to a project that ALREADY EXISTS instead. Because it creates a project by default, calling create_project first and then this tool WITHOUT projectId produces two projects, one of them empty. When a project already exists, whether just created or named by the user, its id belongs in projectId. Attaching appends only: it never renames the project, never changes its owner, and never reschedules tasks that were already there. The plan carries projectTitle, scopeSummary, estimatedStart, estimatedEnd, tasks[] (title, priority, estimatedDays, optional description, subtasks[] and collaborators) and risks[]. On the create path the caller becomes project owner; attaching leaves the existing owner alone. A task the plan does not name an assignee for goes to the person the call is made for, not to the agent persona, so generating a plan does not put its tasks in the agent work queue that list_assigned_tasks reads. Optional epics[] group the tasks into phases or themes ("Design", "Build", "Launch"): each epic has a caller-defined ref, and a task joins one through task.epicRef. When epics is omitted, every task lands in the default "Initial Scope" epic (legacy behaviour). UNDO SEMANTICS DIFFER BY PATH, and the difference is destructive: a project this call CREATED is fully reversed by delete_project, because nothing else is in it. A project this call ATTACHED to is not, because delete_project destroys the pre-existing project and everything that was already in it, not just what this call added; on that path only the individual tasks this call created are safely removable. createdProject in the result distinguishes the two. Limits: up to 20 epics and 100 tasks per call (each task may carry subtasks[]); split a larger plan across calls or extend it afterward with bulk_create_tasks / add_subtasks. The result includes url, a direct link to the project in Onplana, and createdProject, false when the plan was added to a project that already existed, in which case the plan is an addition to the user's project rather than a new one. ALWAYS show that link in your reply: the user is working inside another app and has no other way to find the plan you just built.

NameRequiredDescriptionDefault
planYes
projectIdNoOptional. Add this plan to an EXISTING project instead of creating one. Use it whenever the project is already there, including one you just created. Appends only: the project keeps its name, owner, description and existing task dates.
projectNameNoOptional override for the auto-derived name. Ignored when projectId is set, an existing project keeps its own name.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only give readOnlyHint=false and destructiveHint=false; the description goes far beyond by disclosing the destructive undo asymmetry (delete_project is safe only for a project this call created, and destroys pre-existing content on the attach path), plus owner semantics, caller-as-assignee behavior, the append-only guarantee, warning reporting for collaborators, and hard limits (20 epics / 100 tasks). Nothing here contradicts the annotations — the call itself does not destroy anything.

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 most decision-critical facts — one-call scope, create-by-default vs. attach, and the double-project trap — are front-loaded, and most sentences carry unique information. There is some redundancy: the createdProject/url meaning is stated twice, and the projectId rule is restated after the schema already covers 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?

For a complex nested tool with no output schema and no annotations on result shape, the description supplies everything an agent needs: the plan payload fields, scheduling behavior, epic grouping, limits, and the return values (url, createdProject) including the instruction to surface the link. No material gap remains for correct invocation.

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 compensates for the gaps: it explains that estimatedDays drives computed start/due dates, that epicRef joins one of the declared epics (with the 'Initial Scope' default when epics is omitted), and that projectName is ignored when projectId is set. The projectId explanation largely restates the schema text, which keeps it just below 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?

The opening sentence gives a specific verb (build/instantiate) plus the exact composite resource (project + tasks + subtasks + epics + risks with dates), and the example utterances pin down the intended intent class. It is clearly distinguished from create_project, bulk_create_tasks, add_subtasks and instantiate_template, which are named later as alternatives or extensions.

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 default path (creates a new project) and the explicit alternative (pass projectId to attach to an existing project), then calls out the exact failure mode: calling create_project first and then this tool WITHOUT projectId yields two projects, one empty. It also routes oversized plans to bulk_create_tasks / add_subtasks and dependencies to link_dependency, so the agent has both when-to-use and when-not-to-use guidance.

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

instantiate_templateAInspect

Create a new project from a template (PRO+ feature). Provide the template id, a project name, and a start date (YYYY-MM-DD). The caller automatically becomes the project owner.

NameRequiredDescriptionDefault
nameYesName for the new project.
startDateYesProject start date, YYYY-MM-DD.
templateIdYesId of the template to instantiate.

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=false, destructive=false, idempotent=false), so the description's job is to add context, and it does: the PRO+ entitlement requirement and the side effect that the caller automatically becomes project owner. It does not mention that repeated calls create separate projects (consistent with idempotentHint=false) 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?

Three short sentences, zero filler, and the core action is front-loaded in the first clause. The gating note, required inputs, and ownership side effect each earn their place.

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

Completeness4/5

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

For a mutation tool with annotations but no output schema, the description covers the entitlement gate, required inputs, date format, and ownership consequence. It omits what the caller gets back (e.g. new project id) and any failure conditions, which keeps it from being 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 all three parameters are already documented in the schema. The description restates the three inputs and the YYYY-MM-DD format, which duplicates rather than extends the schema, so the baseline of 3 applies.

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

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Create a new project from a template'), and the 'from a template' qualifier implicitly distinguishes it from create_project and duplicate_project. It never names a sibling or explicitly contrasts with one, 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 '(PRO+ feature)' note gives a plan-level precondition for use, which is useful gating information. However, it offers no guidance on when to choose this over create_project or duplicate_project, leaving the alternative routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

invite_memberA
Destructive
Inspect

Invite a person by email to join this organization. Sends Onplana's standard invitation email in the name of the person this connection acts for; they join when they accept, and re-inviting an address sends a fresh link. Use this after create_project or instantiate_plan to bring the people on the plan into the workspace. seat is MEMBER (default: a team member place, which counts toward the plan's member limit and is a paid seat on paid plans) or GUEST (access to the projects they are added to only; free inside the plan's guest allowance). role (ADMIN, MANAGER or MEMBER, default MEMBER) applies to a MEMBER seat and cannot exceed the caller's own role. Refusals: SEAT_LIMIT_REACHED when members plus invitations already waiting fill the member limit (with the plan, or the 14-day Pro trial, that lifts it where one exists), RATE_LIMITED, EMAIL_UNVERIFIED, and an address that already belongs to a member. Permission: org.member.invite (default MANAGER+); on the Free plan any member except a guest may invite at a MEMBER or GUEST seat.

NameRequiredDescriptionDefault
roleNoOrg role for a MEMBER seat. Default MEMBER.
seatNoMEMBER (default) or GUEST.
emailYesThe address to invite.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: it discloses that a standard invitation email is sent in the acting user's name, that membership begins only on acceptance, that re-inviting sends a fresh link, and it enumerates the precise refusal codes (SEAT_LIMIT_REACHED, RATE_LIMITED, EMAIL_UNVERIFIED, already-a-member). Seat economics (paid seat vs. guest allowance) and the role-ceiling rule are exactly the kind of non-obvious behavior the annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and outcome; the seat, role, refusal and permission details follow in a logical order. It is dense and the refusal/permission sentences are long, but each clause carries actionable information rather than restating 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?

With no output schema, the description supplies the post-call semantics an agent needs: the invitee is not a member until they accept, a re-invite issues a new link, and the specific failure modes that may come back. Permissions, seat limits and refusal codes complete the picture for a mutation tool with openWorld and destructive hints.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the enums/defaults are already documented, so the baseline is 3, but the description adds real meaning: MEMBER counts toward the plan's member limit and is a paid seat, GUEST is limited to assigned projects and free within the guest allowance. It also states that role applies only to a MEMBER seat and cannot exceed the caller's own role, a constraint absent 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 and resource ('Invite a person by email to join this organization') and immediately pins the scope to the organization rather than a project, which separates it from siblings like add_project_member and add_ccb_member. 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 an explicit when-to-use ('Use this after create_project or instantiate_plan to bring the people on the plan into the workspace') plus the permission gate (org.member.invite, default MANAGER+) and the Free-plan exception. It never names the nearest alternative for adding someone only to a project, so the routing is clear but not fully disambiguated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

leveling_narrativeA
Read-onlyIdempotent
Inspect

Generate a prose summary of a project's resource leveling situation. Runs the deterministic overallocation analysis first, then asks the AI to explain WHY the suggested moves were chosen and what the trade-offs are. Returns a 2-3 sentence overall summary and a per-suggestion hint for each recommended task move. Feature: resourceMgmt (PRO+). Use this after resource_leveler_analyze when the user wants a plain- language explanation of the results, not just the raw numbers.

NameRequiredDescriptionDefault
projectIdYesID of the project to narrate leveling results for.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint=false), so the bar is lower, yet the description still adds real context: it discloses a two-stage internal pipeline (deterministic analysis first, then AI explanation), the shape of the return (2-3 sentence overall summary plus per-suggestion hints), and a licensing constraint ('Feature: resourceMgmt (PRO+)'). It stops short of noting AI-call cost or failure modes, so not a full 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with the purpose before the mechanics and the routing guidance. Each sentence contributes (purpose, internal behavior, return shape, usage/feature gate), though the return-shape and 'explain WHY' sentences overlap slightly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description must describe returns, and it does so concretely (overall summary plus per-suggestion hint). For a low-complexity, single-required-parameter, read-only tool with annotations present, nothing an agent needs in order to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the single projectId parameter, so the schema already carries the meaning. The description adds no syntax, format, or constraint detail beyond it, which is the expected baseline for a fully documented single-param tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Generate a prose summary of a project's resource leveling situation') and immediately distinguishes itself from the sibling resource_leveler_analyze by framing itself as the explanatory layer on top of that analysis. An agent can tell it apart from other narrative tools (compose_evm_narrative, critical_path_narrative, summarize_project) by the resource-leveling subject matter.

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 and selection criteria: 'Use this after resource_leveler_analyze when the user wants a plain-language explanation of the results, not just the raw numbers.' It names the prerequisite tool and the condition that selects this one over it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_assigned_tasksA
Read-onlyIdempotent
Inspect

List tasks assigned to YOU (the calling agent / user). Enriched variant of list_my_tasks: each row includes description, agentBrief, projectName, and hasOpenPrompt so an agent can pick its next task and start work without a follow-up get_task call. By default excludes DONE tasks. Filters: status, projectId, includeDone, limit (max 50).

NameRequiredDescriptionDefault
limitNoDefault 25, max 50.
statusNo
projectIdNoRestrict to one project.
includeDoneNoDefault false. Set true to include DONE tasks when no explicit status filter is set.

TDQS

A4.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, so the safety bar is covered. The description adds real behavioral context beyond them: the default DONE exclusion, the enriched return fields (description, agentBrief, projectName, hasOpenPrompt), and the max-50 cap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly packed sentences, front-loaded with the scoping that distinguishes it from list_my_tasks, then the reason it exists, then defaults and filters. No sentence 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 read-only list tool with no output schema, it covers return shape, default filtering, and the filter vocabulary. The only minor gap is that the limit default (25) lives in the schema rather than the description, but the description handles the cap and behavior adequately.

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 description must add some meaning. It enumerates the filter set (status, projectId, includeDone, limit) and the max limit, and implicitly clarifies includeDone only matters when no status filter is set. It adds value over the bare schema, though without full default details.

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 ("List tasks assigned to YOU") with the caller scoping explicit, and it distinguishes itself from the sibling list_my_tasks by calling itself an 'enriched variant' that returns extra fields. An agent can tell what it does and why it differs from the nearest 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 Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States the operative use case (pick next task and start work without a follow-up get_task call) and names the sibling it supersedes (list_my_tasks), plus the default DONE exclusion. It doesn't mention other applicable siblings like next_task, but the primary when-to-use condition is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_audit_logA
Read-onlyIdempotent
Inspect

List AuditLog rows for the caller's org with common filters: userId, action, resource, since (ISO), until (ISO), search (matches userEmail / action / resource). Default limit 50, max 200. Requires OWNER or ADMIN org role, auditLogs feature (ENTERPRISE+). PREFER export_audit_log for bulk CSV/JSON export. Each row carries clientSurface (which client the request came from: WEB, MAKER, EXTENSION, DESKTOP, MOBILE, MCP, PAT, SYSTEM or UNKNOWN) and clientLabel (the precise client, e.g. "Claude Code"). These are a DIFFERENT axis from actorType, which is the actor's privilege. Both are null on rows written before client attribution shipped; that history is deliberately not backfilled, so absence means "unknown", never "web".

NameRequiredDescriptionDefault
limitNoDefault 50, max 200.
sinceNoISO date.
untilNoISO date.
actionNo
offsetNoDefault 0.
searchNoMatches userEmail / action / resource.
userIdNo
resourceNo

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), so the description correctly focuses on what annotations cannot express: required role, plan gating (ENTERPRISE+), default/max limit, and the caveat that client attribution columns are null on pre-backfill history. It does not explain pagination behavior (offset semantics, total counts), which is the only notable gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and filters are front-loaded, and each sentence carries substantive information. The closing clientSurface/clientLabel paragraph is longer than the rest and drifts toward return-value documentation, but it conveys non-obvious domain nuance (distinct axis from actorType, deliberate non-backfill) that prevents misreads.

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 explaining the two client-attribution fields and their null semantics, and it discloses auth/plan requirements for an 8-parameter tool with zero required params. Missing pagination/total-count behavior 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?

With 63% schema description coverage, the description names most parameters, but the semantics it gives for since/until, search, and limit largely restate what the schema already documents, and it omits offset as well as any meaning for action/userId/resource beyond their names. It adds marginal value over the structured fields rather than compensating 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?

The description opens with a specific verb+resource ('List AuditLog rows for the caller's org') and immediately scopes it with the common filter set. It explicitly distinguishes itself from the sibling export_audit_log, so an agent can route between list and export 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?

It states preconditions (OWNER or ADMIN org role, auditLogs feature on ENTERPRISE+) and names the alternative with the condition that selects it: 'PREFER export_audit_log for bulk CSV/JSON export.' That is exactly the when-to-use / when-to-use-something-else guidance the dimension asks for.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_baselinesA
Read-onlyIdempotent
Inspect

List baseline snapshots captured for a project. Returns id, name, takenById, takenAt per row. Snapshot JSON is excluded from the list to keep it small — use get_baseline for the snapshot payload.

NameRequiredDescriptionDefault
limitNoDefault 50, max 100.
cursorNo
projectIdYes

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 (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint=false), so the description's remaining job is behavioral detail. It adds the concrete return shape (id, name, takenById, takenAt) and explains that snapshot JSON is excluded for size reasons, which is genuinely useful. It stops short of describing pagination/ordering behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each earning its place: what it lists, what comes back, and where to go for the payload. The routing advice is front-loaded at the point of need 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?

There is no output schema, so the explicit field listing is valuable, and annotations carry the safety profile. The one gap is cursor-based pagination semantics for a list endpoint, which an agent needs in order to page 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 33%: limit is documented in the schema ('Default 50, max 100') and the description implies projectId via 'for a project', but cursor is completely undocumented in both places. With pagination being a key parameter for a list tool, the description 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.

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 (baseline snapshots) scoped to a project, and distinguishes itself from get_baseline by declaring that snapshot payloads are deliberately omitted. An agent can tell it apart from get_baseline, capture_baseline and compare_baseline without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the alternative (get_baseline) and the condition that selects it (when the snapshot payload is needed). This mirrors the high-calibration pattern of routing the agent to the correct sibling, leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_calendar_eventsA
Read-onlyIdempotent
Inspect

List calendar events for the authorized user. Without a date window, returns the next top events. With startUtc + endUtc, uses Graph calendarView for instance expansion of recurring meetings. No new scope.

NameRequiredDescriptionDefault
topNo
endUtcNo
startUtcNoOptional ISO datetime; pair with endUtc to scope a window.

TDQS

A4/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, non-open-world), so the description's added value is real: the default paging behavior without a window, the semantic shift to calendarView when a window is given, and the auth note 'No new scope'. It stops short of describing ordering, timezone, or result-shape behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core purpose followed immediately by the two behavioral modes. Every sentence carries information the schema and annotations do not, 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 three-parameter read tool with no output schema and full annotation coverage, the description supplies the essential missing pieces: default behavior, windowed behavior, and scope implications. Remaining gaps (pagination limits, ordering, timezone of returned events) are minor 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 coverage is only 33% (only startUtc documented), so the description must compensate and it does so partially: it explains that `top` bounds the count in the no-window mode and that startUtc/endUtc pair to form a window. It gives no default value, maximum, or accepted format for `top`, so half the 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?

States a specific verb and resource (list calendar events) scoped to the authorized user, which is measurable against siblings like list_outlook_messages or find_meeting_times. It does not explicitly name or contrast a sibling, so it stays at 4 rather than 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly distinguishes two usage modes: omitting a date window returns the next `top` events, while supplying startUtc + endUtc switches to calendarView with recurring-instance expansion. That is concrete mode-selection guidance, though it never names an alternative tool or an exclusion condition.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_ccb_membersA
Read-onlyIdempotent
Inspect

List the Change Control Board (CCB) member roster for the current org. Requires org.governance.manage (Admin+ by default). Feature: changeControl (ENTERPRISE+).

NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/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 genuinely useful behavior context beyond annotations: the required permission scope and the enterprise feature gate that must be enabled.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with zero filler. What it does is front-loaded, with the permission and feature prerequisites following in priority order.

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-param read-only list tool with no output schema, the description covers purpose, auth requirement, and feature gate, which is enough to invoke correctly. It could note the roster shape, but that is a minor omission.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the schema cannot carry parameter meaning and the baseline for a no-param tool is 4. Nothing in the description contradicts or needs to compensate for the empty 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 (List) and resource (Change Control Board member roster) with explicit scope ('for the current org'). The verb clearly separates it from the write-side sibling add_ccb_member 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 for use: requires org.governance.manage (Admin+ by default) and the changeControl feature (ENTERPRISE+). It does not explicitly name an alternative or state when-not to use it, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_change_requestsA
Read-onlyIdempotent
Inspect

List change requests. Optional filters: projectId, status. Returns id, title, type, priority, status, schedule + budget impact, projectId, requesterId per row. PREFER get_change_request for full detail incl. reviews; PREFER submit_cr_review to act on a SUBMITTED/UNDER_REVIEW CR you are a designated reviewer for. Plan gate: changeControl (ENTERPRISE+).

NameRequiredDescriptionDefault
limitNoDefault 50, max 100.
cursorNo
statusNo
projectIdNo

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, not destructive, closed-world), so the bar is lower. The description adds real value beyond them: the returned column set plus a 'Plan gate: changeControl (ENTERPRISE+)' prerequisite, which is the kind of constraint annotations cannot express. It omits pagination behavior, which the schema's limit/cursor imply but never explain.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: purpose first, then filters, then return shape, then routing alternatives, then the plan gate. Every clause carries information; the only near-redundancy is restating the status filter values structure that the schema already enumerates.

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 responsibly enumerates returned row fields, plus it discloses the enterprise plan gate and the two preferred alternatives. The remaining gap is pagination/cursor usage for a list tool, which no other structured field supplies.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25%, so the description must compensate. It names projectId and status as optional filters (and the enum values live in the schema), but cursor and limit are never explained in prose beyond the schema's own 'Default 50, max 100.' Two of four parameters get no semantic help.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource ('List change requests') with immediate distinction from the two most confusable siblings, get_change_request and submit_cr_review. An agent can tell what this does and what it is not without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing: 'PREFER get_change_request for full detail incl. reviews' and 'PREFER submit_cr_review to act on a SUBMITTED/UNDER_REVIEW CR you are a designated reviewer for.' It states when to choose each alternative and even the precondition (designated reviewer) for the action tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_commentsA
Read-onlyIdempotent
Inspect

List top-level comments on a task, project, proposal, or issue. Exactly one of taskId, projectId, proposalId, issueId, or companyId must be set. Returns root comments with their direct replies + author info. Newest comments first. Each root comment carries url, the link in the Onplana web app to the task, project, issue, proposal or client it is on.

NameRequiredDescriptionDefault
taskIdNoLimit to a task
issueIdNoLimit to an Issue (Issue Log)
companyIdNoLimit to a client company (Onplana Services)
projectIdNoLimit to a project
proposalIdNoLimit to a proposal

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavior beyond that: it returns root comments plus direct replies with author info, ordered newest-first, each carrying a web-app url. Pagination and result limits are unstated, keeping it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with purpose then constraint then return shape. The final sentence about the url field is a bit wordy for what it conveys, but it does carry return-format information that has no output schema to fall back 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 carries the return-shape burden and does so reasonably: root comments, replies, author info, ordering, and the url field. It omits pagination/limit behavior and reply depth limits, which an agent would want for a list tool on potentially large comment threads.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, but the description adds a genuine constraint not encoded in the schema: 'Exactly one of taskId, projectId, proposalId, issueId, or companyId must be set.' The schema marks nothing required and has no oneOf, so this mutual-exclusivity rule is real added value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description leads with a specific verb and resource ('List top-level comments') and enumerates the exact entity types it operates on (task, project, proposal, issue), which clearly separates it from create_comment and edit_comment. An agent can identify 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?

It states the scoping constraint that exactly one of the five IDs must be set, giving clear invocation context. It stops short of naming alternatives (e.g., list_mentions, list_recent_activity) or noting when this tool is not appropriate, so it is not a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_compliance_exceptionsA
Read-onlyIdempotent
Inspect

List timesheet compliance exceptions for the current org. Filter to active-only with activeOnly=true. Requires org.compliance.manage. Feature: auditLogs (ENTERPRISE+).

NameRequiredDescriptionDefault
activeOnlyNoWhen true, only return non-revoked exceptions that include today.

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 safety is covered. The description adds genuinely new context beyond them: the required permission (org.compliance.manage) and the ENTERPRISE+ feature entitlement. It omits pagination or result-size behavior, so a 4 rather than 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences with the core action front-loaded; the parameter hint and prerequisites follow in order of relevance. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, read-only list tool the description covers purpose, auth, and entitlement, which is most of what an agent needs. It does not mention result shape or pagination, though no output schema exists to carry that, leaving a small gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single parameter is fully documented in the schema, so the baseline is 3. The description's 'Filter to active-only with activeOnly=true' largely restates the schema rather than adding new semantics such as defaults or interaction with revoked exceptions.

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+resource (list timesheet compliance exceptions) and scopes it to the current org, which is enough for an agent to distinguish it from list_timesheet_entries or weekly_compliance. It stops short of an explicit sibling contrast, so it is clear but not maximally differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the tool name and the permission/feature prerequisites ('Requires org.compliance.manage', 'Feature: auditLogs (ENTERPRISE+)') give useful gating context. However, there is no guidance on when to prefer this over related compliance tools such as weekly_compliance or list_audit_log.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_cost_linesA
Read-onlyIdempotent
Inspect

A project's cost lines (its budget list) and their totals against the budget, in the project currency. Each line is EXPECTED, COMMITTED or SPENT. summary: spent = SPENT lines; committed = COMMITTED + SPENT; forecast = every line; remaining = budget - forecast; remainingAfterCommitments = budget - committed. When summary.labourActual is a number, timesheet labour priced by earned value is included in spent, committed and forecast; null means labour is not included. A null budget means none was entered, and the remaining figures are then null, not zero. status filters lines only; summary always covers every line. Access: callers who may read the project cost (budget.read).

NameRequiredDescriptionDefault
statusNoOnly lines in this status.
projectIdYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile, and the description adds substantive behavior: exactly how summary fields are derived (spent/committed/forecast/remaining), that labourActual non-null folds earned-value labour into three totals, that a null budget makes remaining figures null rather than zero, and that status filters lines only while summary always covers everything. It even discloses the required permission (budget.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?

Front-loaded with the resource, then the semantics of summary, then the null/labour caveats, then access. Every sentence carries distinct information; the formula list is dense but necessary given no output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the return-value burden and does it well by defining lines vs. summary and the null semantics. Minor gaps remain: line field composition, ordering, and whether results are paginated or unbounded are unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50% (projectId is undocumented in both places), but the description compensates for the undocumented-in-schema status parameter by explaining that it filters lines only and never the summary — meaning beyond the enum. projectId's meaning is conveyed by the phrase 'A project's cost lines'.

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?

First sentence names the specific resource (a project's cost lines / budget list) plus its scope (totals against the budget, in project currency), which separates it from create_cost_line, update_cost_line and get_cost_line_history by the sibling names alone. It does not explicitly name an alternative tool, 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 semantics: read the lines and totals, optionally filtered by status. It never states when to prefer this over siblings like calculate_evm or portfolio_summary for budget roll-ups, nor any exclusion, so the agent must infer routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_custom_field_defsA
Read-onlyIdempotent
Inspect

List custom-field definitions for an entity type (TASK / PROJECT / PROPOSAL). When projectId is set the return is the union of org-wide definitions and the project's own scoped fields, unless scope='project-only' which trims to just the project-scoped subset. Requires the PRO+ customFields plan feature.

NameRequiredDescriptionDefault
scopeNoWhen projectId is set: project-only for just this project, union (default) for both
projectIdNoWhen set, also include this project's scoped fields
entityTypeNoEntity type to filter to. Omit for every type.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds real context beyond that: the union-of-org-and-project return semantics when projectId is set, the trimming effect of scope='project-only', and the plan-feature prerequisite.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences with the core purpose front-loaded and no filler. Every clause (entity-type scoping, union/scope behavior, plan requirement) contributes actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-required, read-only list tool whose annotations carry the safety profile and with no output schema to explain, the description covers purpose, parameter interaction, and the gating plan feature. Missing only an explicit pointer to sibling tools for the neighboring definition/value operations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, but the description adds value by explaining how projectId and scope interact (union of org-wide and project-scoped fields unless scope='project-only'), which the schema only conveys per-parameter in isolation.

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 custom-field definitions') and scopes it by entity type (TASK/PROJECT/PROPOSAL), so an agent knows exactly what is returned. It does not explicitly distinguish itself from the sibling set (create_custom_field_def, update_custom_field_def, get_custom_field_values), though the 'definitions' vs 'values' contrast is implied by the name.

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 explains the conditional behavior when projectId is set and notes the PRO+ customFields plan requirement, which is useful precondition context. However, it never states when to reach for this tool versus alternatives like get_custom_field_values or the create/update definition siblings, leaving routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_dependenciesA
Read-onlyIdempotent
Inspect

List TaskDependency rows. Specify projectId (all deps in a project) OR taskId (deps where this task is predecessor or successor). Returns predecessor + successor task ids and titles, dependency type (FINISH_TO_START/START_TO_START/FINISH_TO_FINISH/START_TO_FINISH), and lag in days. PREFER get_plan when you need the full dependency graph + the tasks.

NameRequiredDescriptionDefault
limitNoDefault 100, max 200.
cursorNo
taskIdNoDependencies where this task is the predecessor or the successor. Required unless projectId is given.
projectIdNoAll dependencies in this project. Required unless taskId is given.

TDQS

A4.7/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 safety profile is covered. The description adds value beyond that by disclosing the shape and meaning of each returned row (predecessor/successor ids and titles, dependency type with its four enum values, lag in days), which annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four dense sentences, front-loaded with the core action, then the addressing modes, then the return shape, then the routing caveat. No filler and nothing 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?

Although there is no output schema, the description enumerates the returned fields (task ids/titles, dependency type enum, lag), and pagination is covered by the limit/cursor schema. For a read-only list tool with strong annotations, 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.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is a high 75%, so the baseline is 3. The description goes further by framing taskId as matching deps where the task is 'predecessor or successor' and by stating the mutual exclusivity/OR relationship between taskId and projectId, clarifying semantics the schema states only tersely.

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 TaskDependency rows') and immediately distinguishes its two access modes (by projectId vs taskId). It also names the sibling that supersedes it for a related need (get_plan), so an agent can separate it from get_plan, link_dependency, and update_dependency without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit either/or usage ('Specify projectId ... OR taskId') with the meaning of each, plus a clear alternative routing rule: 'PREFER get_plan when you need the full dependency graph + the tasks.' This is the when-to-use and when-to-use-something-else guidance done right.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_documentsA
Read-onlyIdempotent
Inspect

List documents (files + external links) in a workspace library. Returns id, name, fileName, mimeType, size, linkedMode (FILE | LINK), externalProvider, externalUrl, uploader, timestamps. Newest first. Use list_libraries first to discover the libraryId.

NameRequiredDescriptionDefault
limitNoDefault 100, max 500.
cursorNoLast document id from the previous page (nextCursor).
libraryIdYesDocumentLibrary id

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 safety is covered. The description adds value beyond them by enumerating returned fields (id, name, fileName, mimeType, size, linkedMode, externalProvider, externalUrl, uploader, timestamps) and stating sort order ("Newest first") — meaningful since 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?

Three short sentences, front-loaded with purpose, then return shape, then ordering, then prerequisite — every clause carries information with no repetition of the tool name or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description responsibly documents the fields returned and the sort order, and the limit/cursor semantics live in the schema. It is nearly complete; only explicit pagination behavior (what nextCursor means for continuation) is left entirely to the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description goes slightly beyond by explaining where libraryId comes from (list_libraries) and implying cursor-based paging through the ordered listing, adding provenance that the schema's one-line "DocumentLibrary id" does not provide.

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 documents (files + external links) in a workspace library") and clarifies scope by noting it covers both uploaded files and links. It distinguishes itself from list_libraries via the discovery pointer, though it does not contrast with search_docs or list_document_versions, which could be confused with it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Use list_libraries first to discover the libraryId" gives a concrete prerequisite and ordering of operations, which is exactly the context an agent needs. It does not state when to prefer search_docs over this tool, so exclusions are absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_document_versionsA
Read-onlyIdempotent
Inspect

List a workspace document's version history, newest first. Each entry: versionNumber, fileName, mimeType, size, createdAt, createdBy. Also returns the approval record: status (the approval status a workflow set, with the version it covers) and approvals (who approved or rejected which version, and when). The approval record is part of the document approval workflows plan feature; on a plan without it the two fields are absent. Read-only.

NameRequiredDescriptionDefault
documentIdYesWorkspaceDocument id.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower, and the description still adds real value: the newest-first ordering, the exact field set returned, and the plan-gating behavior where approval fields are absent on plans without the approval workflows feature. 'Read-only' is slightly redundant with readOnlyHint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then the return fields and the approval caveat. Efficient, though 'Read-only' duplicates the annotation and the field enumeration could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description fully carries the burden by enumerating the entry fields, the approval record shape, and the conditional plan-gating. An agent knows what it will receive 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?

Only one parameter (documentId) with 100% schema description coverage, so the schema already documents it. The description adds no format or sourcing detail beyond implying it identifies the workspace document, matching the baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List a workspace document's version history') plus ordering ('newest first'). This distinguishes it clearly from siblings like get_document_history, list_documents, or restore_document_version.

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 description of returned data, but there is no explicit statement of when to choose this over get_document_history or get_document_metadata, nor any prerequisites beyond the documentId. Adequate but with a clear routing gap among many list/get siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_epicsA
Read-onlyIdempotent
Inspect

List epics in a project (ordered). Returns each epic's id, name, description, color, order, projectId, taskCount. Cursor pagination (last-id). PREFER get_plan when you also need the tasks under each epic; PREFER get_epic for full single-epic detail.

NameRequiredDescriptionDefault
limitNoDefault 50, max 100.
cursorNo
projectIdYes

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 safety, so the description wisely adds ordering and cursor-pagination mechanics (last-id). It omits auth/rate-limit context, but pagination behavior is genuinely useful 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 tight sentences, front-loaded with purpose, with the return-field list earning its place given no output schema exists.

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 listing return fields, and it covers pagination and sibling routing; nothing essential for a correct call is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33% (only limit is documented). The description explains the cursor mechanism ("last-id") but leaves projectId and the cursor's format undefined, so it only partially 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+resource ("List epics in a project (ordered)") and enumerates the returned fields, which lets an agent distinguish it from get_plan and get_epic without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent via "PREFER get_plan when you also need the tasks under each epic; PREFER get_epic for full single-epic detail," naming both alternatives and the conditions that select them.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_escalationsA
Read-onlyIdempotent
Inspect

ENTERPRISE+ list of in-flight TimesheetEscalation rows for the org. Optional status (active|all, default active) filters resolved rows. Returns each user's current step + step name from the active template + history timeline. Mirrors GET /api/compliance/escalations. Permission: org.compliance.manage (default OWNER+/ADMIN+).

NameRequiredDescriptionDefault
statusNoDefault: active.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already carry the safety profile (readOnly, idempotent, non-destructive), and the description adds real value on top: the required permission (org.compliance.manage, OWNER+/ADMIN+), the ENTERPRISE+ tier gate, and the returned content (current step, step name, history timeline). It stops short of pagination or volume limits, keeping it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single dense paragraph that front-loads scope and resource before the filter, return shape, endpoint, and permission. Every clause carries information, though the packed run-on style slightly reduces scannability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully specifies the return shape, and it covers tier gating, permission, and filtering. Only pagination/result-size behavior is absent, which is a minor gap for a 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% and the schema already declares the enum and default, so baseline is 3; the description earns one more by clarifying what the values mean, namely that status=all includes resolved rows while active filters them out.

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 (in-flight TimesheetEscalation rows) with clear org scope, and the ENTERPRISE+ qualifier plus the sibling resource names distinguish it from list_compliance_exceptions, list_timesheet_entries, and weekly_compliance.

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 usage via the default-active behavior and the org-wide scope, but never states when to reach for this tool versus adjacent ones like list_compliance_exceptions or weekly_compliance, and offers no explicit exclusions or prerequisites beyond the permission note.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_evaluation_criteriaA
Read-onlyIdempotent
Inspect

List evaluation criteria for a governance gate (PROPOSAL_REVIEW, BUSINESS_CASE_REVIEW, or PLAN_REVIEW). Falls back to global defaults when no org-specific criteria exist. Feature: governance (ENTERPRISE+).

NameRequiredDescriptionDefault
gateNoOptional: filter to one gate.

TDQS

A4/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, not open-world). The description adds genuine behavioral context beyond them: the fallback-to-global-defaults behavior, which tells the agent results may not be org-specific, and the ENTERPRISE+ tier requirement, which explains potential authorization failures.

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 the tool returns before the fallback nuance and the tier caveat. Nothing is padded or repeated for its own sake.

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 full annotations, a fully described single param, and no output schema, an agent has what it needs to call this correctly. The tier gate and fallback behavior are covered; only the shape/ordering of returned criteria is unstated, which is a minor omission for a simple list 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 the single gate parameter is fully documented with its enum values, so the schema carries the meaning. The description's inline enumeration of the same three gates duplicates rather than extends that information, 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 evaluation criteria) and bounds it to a governance gate, naming the three valid gates inline. An agent can immediately distinguish this from create_evaluation_criterion and update_evaluation_criterion, which mutate the same resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The fallback sentence ('falls back to global defaults when no org-specific criteria exist') gives useful context about results, but the description never says when to reach for this tool versus list_readiness_criteria or the gate-reviewer tools, nor whether the gate filter is the intended first call. 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.

list_gate_approvalsA
Read-onlyIdempotent
Inspect

Return the calling agent's gate-approval inbox (ProposalGateApproval rows where reviewer = caller). Default status=PENDING (your queue: seats whose proposal is still waiting on that gate, in the gate's current review round); pass status=APPROVED/REJECTED to see your decision history, where round says which time the proposal was at that gate. Reviewers with org.governance.review can pass reviewerId to inspect another user's queue (e.g. admin auditing). PREFER submit_proposal_review to act on a PENDING row. Plan gate: governance (ENTERPRISE+).

NameRequiredDescriptionDefault
limitNoDefault 50, max 100.
statusNo
reviewerIdNoDefault = caller. Org-tier admins can inspect other reviewers.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, and the description adds real behavioral context beyond them: default status=PENDING, the meaning of `round` across review cycles, the org.governance.review permission needed for reviewerId, and the ENTERPRISE+ governance plan gate. It stops short of describing pagination/return-shape behavior, so not a full 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense block, but front-loaded with the core purpose and default behavior, then progressively adding mode switches, permissions, and the preferred alternative. Every clause carries information, though the run-on structure with parentheticals makes it heavier than necessary.

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 reasonably characterizes the return (approval rows, `round` indicating which review round, gate context) and covers defaults, permissions, plan gating, and the follow-up tool. Pagination behavior is the main omission an agent might want.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67% and the schema leaves `status` undescribed, but the description supplies the semantics (default PENDING, APPROVED/REJECTED = decision history) and adds permission nuance to reviewerId beyond the schema's 'Org-tier admins can inspect other reviewers.' Only `limit` is left purely to the schema, which already covers 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?

States a specific verb+resource ('Return the calling agent's gate-approval inbox') and immediately bounds the scope to ProposalGateApproval rows where reviewer = caller. It is clearly distinguishable from sibling tools like list_gate_reviewers or list_proposal_reviews without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells the agent what the default call returns (PENDING queue), when to switch modes (status=APPROVED/REJECTED for decision history), when reviewerId applies (org.governance.review for auditing another user's queue), and names the alternative tool with its condition: 'PREFER submit_proposal_review to act on a PENDING row.'

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_gate_reviewersA
Read-onlyIdempotent
Inspect

List the designated gate reviewers for the current org. Optionally filter by gate (PROPOSAL_REVIEW, BUSINESS_CASE_REVIEW, PLAN_REVIEW). Requires org.governance.manage. Feature: governance (ENTERPRISE+).

NameRequiredDescriptionDefault
gateNoOptional gate filter.

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/no-destructive, so safety is covered; the description adds genuinely new operational context — the authorization scope and the ENTERPRISE+ entitlement gate. It does not describe return shape or pagination, but with no output schema and a simple no-arg list, that gap is minor.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with purpose, then filter behavior, then the gating requirements. No filler; each clause carries distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-optional-parameter read tool with full schema coverage and complete safety annotations, the description supplies everything else an agent needs: authorization requirement, tier availability, and filter semantics. 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?

Schema description coverage is 100% and the single enum is fully documented in the schema; the description merely repeats the three enum values. Baseline 3 applies since the description adds no meaning beyond the structured field.

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 (designated gate reviewers) scoped to the current org. This is clearly separable from the write sibling designate_gate_reviewer and from the adjacent list_gate_approvals 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 Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context for use: the required permission (org.governance.manage), the feature tier (governance, ENTERPRISE+), and the optional narrowing by gate. It does not name alternatives or explicitly say when not to use it, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_ideasA
Read-onlyIdempotent
Inspect

List captured ideas. scope="general" returns unfiled ideas (no project), "mine" returns ideas the caller captured, "all" (default) returns both. Filter by projectId or status. Ideas are NOT tasks: they never appear in list_my_tasks, so this is the only way to see them.

NameRequiredDescriptionDefault
limitNoDefault 50, max 200.
scopeNo
statusNo
projectIdNo

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

While the annotations handle the safety profile (readOnlyHint), the description adds critical behavioral context. The explicit distinction ('Ideas are NOT tasks') is a major behavioral warning that helps the agent understand the data type and prevents 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?

The description is highly efficient and front-loaded. It delivers the core functionality, scope definition, and critical warning about task distinction in a tight, high-value structure.

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?

It is very complete regarding usage and scope parameters. The only minor gap, common for list functions without an output schema, is the lack of detail on the eventual returned data structure or pagination behavior.

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?

Since schema description coverage is low (25%), the description must compensate. It successfully does this by explaining the qualitative difference between the `scope` enum values and stating that filtering can occur by `projectId` or `status`, thus adding meaningful context beyond the schema types.

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 tool's purpose—to list captured ideas. It excels by detailing the operational semantics of the `scope` parameter ('general' for unfiled, 'mine' for caller's ideas, 'all' for both), providing precise definitions for different use cases.

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 tool provides explicit guidance on when *not* to use it, specifically warning the user that ideas are not tasks and instructing them to use `list_my_tasks` if they need to see tasks. This robustly prevents incorrect sibling tool invocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_issue_attachmentsA
Read-onlyIdempotent
Inspect

List the attachments on an Issue (metadata only: id, fileName, mimeType, size, uploader, createdAt). Use read_issue_attachment to fetch the content of one. On a bug report the attachment is usually the evidence. Caller must be able to read the issue.

NameRequiredDescriptionDefault
issueIdYesThe issue id.

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 and closed-world, so safety is covered. The description still adds real value beyond them: the metadata-only return shape and the read-permission requirement, which annotations do not express. It does not mention pagination or result limits, 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with purpose, then routing, then domain context, then the permission caveat. The 'bug report / evidence' sentence is mildly tangential but does convey useful domain context; otherwise zero waste.

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 listing the returned metadata fields (id, fileName, mimeType, size, uploader, createdAt) and the read-permission requirement. 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?

Only one parameter and schema coverage is 100%, so the schema already documents issueId fully. The description restates 'on an Issue' but adds no format, id-type, or validation detail beyond the schema, making the baseline 3 correct.

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 the attachments on an Issue') and immediately scopes the result to metadata, enumerating the exact fields returned. It also distinguishes itself from the sibling read_issue_attachment, so an agent can route between the two without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the alternative ('Use read_issue_attachment to fetch the content of one') and states the precondition ('Caller must be able to read the issue'). Both when-to-use and the auth gate are spelled out rather than inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_issuesA
Read-onlyIdempotent
Inspect

List Issues visible to the caller. Filters: projectId (optional - omit for cross-project), status, severity, type, ownerId. Ordered by severity desc then most-recently-reported. Returns up to 50 per call.

NameRequiredDescriptionDefault
typeNo
limitNoDefault 25, max 50.
statusNo
ownerIdNo
severityNo
projectIdNo

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 (readOnlyHint, destructiveHint=false, idempotentHint), so the bar is lower. The description nonetheless adds real behavioral context: deterministic ordering ('severity desc then most-recently-reported') and a result-set ceiling ('up to 50 per call'). It stops short of explaining behavior past that ceiling or whether a total count 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?

Three tight sentences, front-loaded with the operation and scope, then filters, then ordering and size. No filler and no repetition of schema enum values.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with no output schema and mostly undescribed parameters, the description covers scope, filterability, ordering, and page size well enough to invoke correctly. The remaining gap is pagination beyond 50 results, which is unmentioned and not exposed by any schema 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 description coverage is only 17%, so the description carries most of the explanatory burden. It does this partially: it names all six filters and clarifies that omitting projectId means cross-project, which the schema does not state. But status, severity, type, and ownerId are only listed by name with no added meaning, and combination semantics are unaddressed.

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 ('List Issues') and a scope qualifier ('visible to the caller'), so an agent immediately knows this is a scoped read of the issue collection. It does not, however, distinguish itself from adjacent siblings such as list_related_issues or get_issue, leaving that differentiation to the caller.

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 parenthetical 'projectId (optional - omit for cross-project)' gives a genuine when-to-use signal for one path. Beyond that there is no guidance on when to prefer this tool over list_related_issues, list_org_risks, or get_issue, and no note on whether filters combine (AND vs OR).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_librariesA
Read-onlyIdempotent
Inspect

List document libraries on a project or proposal, the tenant-level libraries with scope="org", or across everything with all=true. Returns id, name, parent project/proposal name, and document count. Newest first. Pass exactly one of projectId / proposalId / scope="org" / all=true.

NameRequiredDescriptionDefault
allNoReturn every library the caller can see
scopeNoSet "org" for the tenant-level (organization) libraries
projectIdNoLimit to this project
proposalIdNoLimit to this proposal

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 (readOnly, idempotent, non-destructive, closed-world), so the bar is lower; the description adds real value beyond them by disclosing the return fields, the "newest first" ordering, and the mutual-exclusivity constraint on filters.

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 every clause earns its place — scoping modes, return shape, ordering, and the exclusivity rule. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly compensates by naming the returned fields and ordering, and it fully covers the four-parameter filtering model and its constraint. 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.

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 constraint the schema cannot express: exactly one of the four filters must be supplied. It also restates what each mode yields, though the schema already documents each parameter individually.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

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 document libraries") and immediately distinguishes the three scoping modes (project/proposal, scope="org", all=true), which is exactly what separates it from siblings like create_library or list_documents. An agent can select it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit context for each mode (project/proposal vs tenant-level org vs everything) and a hard rule — "Pass exactly one of projectId / proposalId / scope=\"org\" / all=true" — that prevents invalid invocations. It stops short of naming alternative tools for adjacent needs, hence not a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_mentionsA
Read-onlyIdempotent
Inspect

List @-mentions for the calling user from the last 30 days. Scoped to ctx.userId. Implementation matches the route: fetch the most recent 200 notifications, filter by metadata.kind === "mention".

NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly/idempotent/non-destructive, so the bar is lower, but the description adds real behavioral facts they don't carry: the 30-day window, user scoping via ctx.userId, and a hard 200-notification scan that can silently omit older mentions. That cap is genuinely useful for interpreting completeness of results.

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, audience, and time window in the first sentence. The final sentence mostly restates cheaply useful content (the 200 cap) but wraps it in internal implementation language ('Implementation matches the route') that is not relevant to a caller.

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, read-only list tool, the description covers source, scope, window, and the truncation limit. With no output schema it could go further and hint at the shape of a mention (id, task, comment, timestamp), but nothing critical to correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4 and there is no parameter semantics to get wrong. The description correctly implies there is no filtering or pagination input to supply.

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 @-mentions') with clear scope: the calling user, last 30 days, scoped to ctx.userId. It is distinguishable from generic notification tools in intent, but it never explicitly names or contrasts the closest sibling (list_notifications), which also returns mentions among other types.

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 when-to-use / when-not-to-use guidance and no mention of alternatives. Given the crowded notification family (list_notifications, mark_notification_read, list_recent_activity), an agent gets no help choosing this tool over list_notifications, which likely covers the same data plus more.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_milestonesA
Read-onlyIdempotent
Inspect

List milestones in a project ordered by order asc then dueDate asc. Optional completed filter. Returns id, title, dueDate, completed, completedAt, order, projectId, and url (its link in the Onplana web app). Distinct from Task.isMilestone, these are first-class Milestone rows with their own dueDate column.

NameRequiredDescriptionDefault
limitNoDefault 50, max 100.
cursorNo
completedNo
projectIdYes

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, closed-world, and non-destructive, so the safety profile is covered. The description adds real context beyond that: deterministic ordering, an optional completed filter, and the domain-model distinction from Task.isMilestone. It stops short of explaining pagination or result 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?

Three sentences, front-loaded with the action and ordering before secondary detail. The return-field enumeration is somewhat listy but justified given there is no output schema. No wasted preamble.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully enumerates returned fields and the url semantics, and gives ordering and filtering. The notable omission is pagination behavior around cursor/limit, which matters for a paged list tool but is not fatal given the annotations cover the rest.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25% (only limit is documented), so the description must compensate. It clarifies 'completed' and project scope but leaves 'cursor' completely unexplained, a meaningful gap for a paginated list. Partial compensation warrants a middling 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?

States a specific verb and resource ('List milestones in a project') plus the ordering ('order asc then dueDate asc'), and explicitly separates these first-class Milestone rows from Task.isMilestone. An agent can identify the operation and scope without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description notes the optional completed filter and clarifies the Milestone-row vs Task.isMilestone distinction, which implies usage. However, it never says when to prefer this over get_milestone or a task-level filter, and gives no exclusions. 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.

list_my_operationsA
Read-onlyIdempotent
Inspect

List MY recent tool invocations (AiOperation rows) since a given timestamp. Conversation-scoped by default (just this session); pass allMySessions=true to widen to every MCP conversation in this org. Each row carries toolName, mode (PREVIEW/APPLY), status (APPLIED/FAILED/etc), outputEntityType+Id, errorMessage, and durationMs. errorMessage repeats the same message the failing call returned at the time, so a constraint trip reads as the actionable explanation rather than raw database text. Time window capped at 30 days. Scope: this answers agent-restart introspection ("what did I do before I crashed?") from the operation ledger, whereas list_recent_activity(projectId, since) answers "what changed on this PROJECT?" from the activity feed. Different tables, different questions.

NameRequiredDescriptionDefault
limitNoDefault 50, max 200.
sinceYesISO timestamp. Returns ops with createdAt >= since. Max 30 days ago.
allMySessionsNoDefault false (this-conversation only). When true, widens to every MCP conversation in this org.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is established. The description adds meaningful operational context: conversation-scoped default, org-wide opt-in, 30-day cap, returned row fields, and errorMessage semantics. It does not contradict any annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and scope, then layers in return fields, errorMessage detail, cap, and sibling differentiation. Every sentence contributes useful information for correct invocation or routing. It is dense without being padded.

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 filtered list tool with full annotation coverage and no output schema, the description supplies the missing return-field information and scope semantics. It also explains the operation-ledger versus activity-feed distinction that an agent needs for tool selection. Nothing essential 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 limit, since, and allMySessions. The description mostly restates the since and allMySessions semantics and omits limit entirely, so it adds little beyond the structured parameter descriptions. Baseline 3 is appropriate when the schema carries 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: list MY recent tool invocations, identified as AiOperation rows. It explicitly distinguishes this from the sibling list_recent_activity by table, question, and scope. An agent can tell what it does and how it differs from alternatives without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit use case, agent-restart introspection, and explains the default conversation scope versus the allMySessions=true widening behavior. It also names the alternative list_recent_activity and contrasts the different questions each tool answers. This is clear when-to-use and when-to-prefer-another guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_my_tasksA
Read-onlyIdempotent
Inspect

Answers "what is on my plate", "my tasks this week" and "what do I have overdue" from the user's Onplana workspace. List tasks assigned to YOU (the calling user), and tasks you collaborate on. Resolves "me" server-side - no need to pass an assignee id. Each row's role is "assignee" or "collaborator"; a collaborator row also names the assignee in assigneeName. Optional scope: "assigned" (the default, the tasks above) or "managed", every task in the projects you manage (projects you own, or where your project role can edit the project), whoever holds it; a row there you are not on has role "manager" and names its assignee. Optional filters: status (TODO / IN_PROGRESS / REVIEW / DONE / BLOCKED), overdueOnly (only tasks past due date and not DONE). Default returns 25, max 50. PREFER list_assigned_tasks when YOU are an AI agent - that variant adds agentBrief, projectName, and hasOpenPrompt to each row so you can start work without a follow-up get_task. Use list_tasks instead when querying across multiple users.

NameRequiredDescriptionDefault
limitNoDefault 25, max 50.
scopeNo"assigned" (default): tasks you hold or collaborate on. "managed": every task in the projects you manage.
statusNo
overdueOnlyNoOnly return tasks past their due date and not yet DONE.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/idempotentHint/destructiveHint=false, lowering the bar. The description still adds real value: server-side resolution of "me", the meaning of the returned `role` and `assigneeName` fields, what the "managed" scope includes, and the default 25 / max 50 limit behavior. It does not discuss pagination beyond the limit or ordering.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and natural-language triggers are front-loaded, followed by scope, filters, limits, and routing. It is long, but nearly every clause carries distinct information; the closing routing paragraph is dense yet justified given the large sibling set.

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 list tool with no output schema, the description covers interpretation of returned rows (role, assigneeName, manager role), scope semantics, filters, and defaults. Nothing material an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75%, so the schema documents most parameters. The description still adds substantive meaning: it defines "managed" precisely (projects you own or can edit, whoever holds the task), lists the status enum values, and explains overdueOnly as past-due and not DONE. Limit is only restated (default 25, max 50) with no 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?

Names a specific verb and resource (list tasks) and scopes it precisely to the calling user via server-side "me" resolution. It distinguishes itself from siblings by explicitly routing to list_assigned_tasks and list_tasks with conditions, so an agent can pick it without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use guidance including natural-language triggers ("what is on my plate", "my tasks this week", "what do I have overdue") and two named alternatives with the condition that selects each. The scope=assigned vs managed distinction further clarifies when the tool widens its reach.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_notificationsA
Read-onlyIdempotent
Inspect

List the calling user's notifications. Scoped to ctx.userId; never returns another user's inbox. Optional filters: onlyUnread, type (NotificationType enum value), since (ISO date), search (matches title + body). Default 50, max 100. PREFER list_mentions for @-mention drill-down; PREFER mark_notification_read to flip a single row read.

NameRequiredDescriptionDefault
typeNo
limitNoDefault 50, max 100.
sinceNoISO timestamp.
searchNo
onlyUnreadNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, non-destructive and a closed world, so the safety profile is covered. The description adds real behavior beyond that: results are hard-scoped to the caller's inbox and never leak another user's rows, plus the default 50 / max 100 limit cap. It stops short of describing ordering or paging 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 sentences, zero filler, front-loaded with the resource and its key constraint before the filter list and the alternative routing. Each clause carries information an agent needs at call time.

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-shape burden, and it covers the important bits (what set is returned, the size cap). It would be marginally stronger if it stated the ordering of returned notifications or whether a cursor is returned at the 100 cap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 40%, but the description compensates by naming four of the five filters and their semantics: onlyUnread, type as a NotificationType value, since as an ISO date, and search matching title plus body. The 'search matches title + body' detail is genuinely additive over the bare schema. It does not enumerate valid NotificationType values, which is the one remaining 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 the calling user's notifications') and immediately narrows scope to ctx.userId, explicitly denying cross-user access. It differentiates itself from near-name siblings by naming list_mentions and mark_notification_read as the tools for adjacent 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 explicit routing rules: use list_mentions for @-mention drill-down and mark_notification_read to flip a single row read. That is genuine when-to-use-this-instead guidance. It does not address the other obvious alternatives in this cluster (dismiss_notification, dismiss_all_read_notifications, mark_all_notifications_read, list_notification_types), so it stops short of full coverage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_notification_typesB
Read-onlyIdempotent
Inspect

List the distinct NotificationType values the caller has received, each with the row count. Useful for building filter chips. Scoped to ctx.userId.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already cover the safety profile (readOnly, idempotent, closed-world, non-destructive), and the description adds real behavior: distinct values, per-type counts, and ctx.userId scoping. However, it directly conflicts with the annotation title, which advertises a 'Static catalog of notification types and their default channels' — a global, non-personalized catalog rather than the caller's received types. That conflict undermines behavioral trust.

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 listed and what each row contains; the usage hint is brief and earns its place. Nothing is padded or repeated.

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 zero-parameter read-only lister with no output schema, the description usefully sketches the return shape (distinct type + count), but omits ordering, whether counts are total or unread, and any pagination or cap. Combined with the unresolved title conflict, an agent still has open questions about what it will get back.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero declared parameters, so the baseline is 4. The description still adds meaning by stating the implicit scope ('Scoped to ctx.userId'), clarifying that no filter argument is expected or accepted.

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 distinct NotificationType values the caller has received, each with the row count.' That is distinguishable from list_notifications (which returns notification instances) and get_notification_preferences, though the description never names those siblings to make the distinction 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?

'Useful for building filter chips' gives one concrete use case, so usage is implied rather than left entirely blank. There is no when-not-to-use guidance and no named alternative, so an agent must infer that group-level counts belong here and per-notification rows belong to list_notifications.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_org_membersA
Read-onlyIdempotent
Inspect

List active members of the caller's organization with name + role. Every row carries isAgentPersona: true means a service account (an MCP-connected agent), false means a person. Filter on it before reporting headcount or reviewing who holds access, since agents are excluded from 2FA posture and billable seats elsewhere in the product. For OWNER/ADMIN callers, also returns email and 2FA-enabled status. SCIM-deactivated members are excluded - they can't be assigned tasks until reactivated. Optional role filter (OWNER/ADMIN/MANAGER/MEMBER/GUEST).

NameRequiredDescriptionDefault
roleNo
limitNoDefault 50, max 200.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover safety (readOnly, idempotent, non-destructive); the description goes well beyond them by disclosing that SCIM-deactivated members are excluded, that OWNER/ADMIN callers get extra email and 2FA-enabled fields while other roles do not, and that isAgentPersona=true marks service accounts excluded from 2FA posture and billable seats elsewhere.

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 what it returns, then conditions (agent vs person, role-gated fields, exclusions), then the filter. Dense but each sentence carries information; the isAgentPersona rationale sentence is the longest and slightly over-explains for a list tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still conveys the essential return shape (name, role, conditional email/2FA status) and the exclusion rule for deactivated members, which is what an agent needs to interpret results 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 50%: `limit` is documented in the schema, and `role` is enumerated there. The description repeats the role enum values but adds no semantics beyond them and never addresses the limit/pagination parameter, 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.

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 (active members of the caller's organization) plus the returned fields (name + role). Scope terms like 'active' and 'caller's organization' distinguish it from siblings such as list_team_members, list_ccb_members, and get_team without opening their 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?

Explicitly tells the agent to filter on isAgentPersona 'before reporting headcount or reviewing who holds access', which is real when-to-use guidance tied to downstream workflows. It does not name alternative tools (e.g., list_team_members) for narrower member queries, so routing between siblings is left implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_org_risk_patternsA
Read-onlyIdempotent
Inspect

Aggregate cross-project risk patterns for the caller's accessible projects. Returns per-category accepted vs dismissed counts, the projects where the category surfaced, and a verdict (recurring / frequently_dismissed / mixed). Use this when planning risk analysis on a new project or when the user asks "what kinds of risks keep coming up for us?" Optionally filter by category (SCHEDULE / RESOURCE / BUDGET / SCOPE / EXTERNAL) or change the windowDays lookback (default 90, max 365).

NameRequiredDescriptionDefault
categoryNoOptional single-category filter.
windowDaysNoLookback window in days. Default 90.

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 then adds value by disclosing the output shape (accepted vs dismissed counts, surfaced projects, verdict values) and that scope is limited to the caller's accessible projects.

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 front-loaded sentences: purpose/return shape first, then usage trigger, then parameter notes. Efficient and well ordered, with only mild redundancy around parameters already in 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?

With no output schema, the description carries the return-value burden and does so fully: counts per category, source projects, and verdict enumeration. Combined with usage triggers and parameter defaults, an agent has what it needs to select and 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%, so both parameters are fully documented in the schema. The description restates the enum categories and the windowDays default/max, which the schema already provides, adding no meaning beyond it, 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 and resource: aggregates cross-project risk patterns for the caller's accessible projects, scoped by category counts and verdicts. This is clearly differentiated in spirit from list_org_risks, but the sibling compute_risk_patterns is not addressed, leaving a small ambiguity.

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 contexts: 'when planning risk analysis on a new project' and the sample user question. Clear trigger conditions, but it names no alternative tool or exclusions for when a different risk tool should be preferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_org_risksA
Read-onlyIdempotent
Inspect

List the top 20 HIGH and CRITICAL undismissed risks across every project the caller can see, ordered by severity descending then most-recent first. PREFER list_risks when you need filtering by project, severity, category, or to include dismissed rows.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/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 real behavioral context beyond them: a hard cap of 20 rows, the undismissed filter, implicit redaction to what the caller can see, and a deterministic sort order. It does not disclose whether the 20-item cap is a truncation that hides additional risks, which is the one notable gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, fully front-loaded: the scope/cap/ordering comes first and the routing advice second. No filler, no restatement 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?

With no output schema, the description does the necessary work by stating ordering, the 20-row cap, and the undismissed filter, which is what an agent needs to interpret results. It stops short of describing what fields a risk record contains, so it is near-complete rather than fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to compensate for; baseline 4 applies. The description correctly implies that all filtering must happen via the sibling tool because none is available here.

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 risks), the scope (across every project the caller can see), the population (top 20 HIGH/CRITICAL undismissed), and the ordering (severity desc, then most-recent). It also contrasts itself against the sibling list_risks, 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 names the alternative and the exact conditions that select it: use `list_risks` when filtering by project, severity, category, or when dismissed rows are needed. This is a when-to-use/when-to-use-something-else statement with no inference required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_outlook_messagesA
Read-onlyIdempotent
Inspect

List recent Outlook inbox messages for the authorized user. Reuses existing Mail.Read scope (no new consent). Default 50 most recent; unreadOnly=true filters to unread.

NameRequiredDescriptionDefault
maxResultsNo
unreadOnlyNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/idempotentHint/destructiveHint=false, so the safety profile is covered. The description adds meaningful context beyond that: the Mail.Read scope is reused with no new consent, the default page size is 50, and unreadOnly switches to an unread filter. Return shape and pagination are not described.

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 verb+resource and followed by the auth note and defaults. Every clause contributes information; nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-optional-parameter read tool with rich annotations and no output schema, the description covers scope, default behavior, filtering, and consent requirements. Only minor gaps remain (pagination/ordering of 'most recent'), which are low-risk for correct invocation.

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 0%, so the description carries the burden, and it does document both parameters — maxResults via the stated default of 50 most recent, and unreadOnly via 'filters to unread'. It could be sharper about maxResults being a count limit, but the semantics are conveyed.

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 (recent Outlook inbox messages) scoped to the authorized user. The resource is clearly distinguishable from sibling list tools such as list_calendar_events and from the write-side send_outlook_message.

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 contextual guidance for use: the messages belong to the authorized user, no new consent is required, and the two filter modes are described. It does not name exclusion conditions or point to an alternative tool, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_overdueA
Read-onlyIdempotent
Inspect

Answers "what is overdue across my projects" and "which tasks are late" from the user's Onplana workspace. List tasks that are past their due date and NOT yet DONE, across every project visible to the caller. Optional projectId filter to narrow to one project. Returns up to 25 tasks ordered by most-overdue first, with a daysOverdue field so the model can prioritise response. Use list_my_tasks({overdueOnly:true}) for "MY overdue tasks only" - this tool returns overdue tasks across all assignees. Each row carries collaborators, the people working on the task besides its assignee.

NameRequiredDescriptionDefault
limitNoDefault 25, max 50.
projectIdNoOptional - narrow to one project.

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 goes further by disclosing ordering ('most-overdue first'), the 25-item cap, the `daysOverdue` field, and the fact that rows carry `collaborators`. The one omission is what to do past the cap (no cursor/pagination path is mentioned), which leaves a practical gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the two user questions the tool answers and the scope before the sibling routing advice. Slightly long at five sentences, and the trailing `collaborators` detail is loosely attached, but 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?

With no output schema, the description compensates by naming the returned fields (daysOverdue, collaborators) and the ordering, and it pins down scope and assignee coverage. The only missing piece is how to retrieve results beyond the 25-row cap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters are already documented there, including the 'Default 25, max 50' limit semantics. The description's notes on projectId narrowing and the limit restate rather than extend 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 tasks that are past their due date and NOT yet DONE'), plus the scope ('across every project visible to the caller'). It also explicitly distinguishes itself from the nearest sibling, list_my_tasks, so an agent can route without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the alternative tool and the exact condition that selects it ('Use list_my_tasks({overdueOnly:true}) for "MY overdue tasks only"'), and clarifies the exclusions (all assignees, not just mine). The optional projectId narrowing is also framed as a usage decision.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_pagesA
Read-onlyIdempotent
Inspect

List web part pages (PRO+ feature) as metadata only. Omit projectId for organization-scoped pages; pass projectId for that project's pages. Restricted pages you cannot access are hidden, and pages that have never been published are hidden unless you can edit them.

NameRequiredDescriptionDefault
projectIdNoOptional. Omit for org pages; pass to list a project's pages.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/idempotentHint/OPEN-world=false, so the safety profile is covered. The description adds real behavioral value by disclosing the visibility model: restricted pages you cannot access are hidden and never-published pages are hidden unless you can edit them. It omits pagination/result-cap behavior, 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 with no filler, and the scope ('metadata only') plus the org-vs-project constraint are front-loaded ahead of the visibility caveat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-optional-parameter list tool with no output schema, the description covers scope, filtering, and visibility rules. Only return-shape details such as pagination or the metadata fields returned are unaddressed, 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 100% and the single optional parameter is fully documented in the schema, so the description's projectId sentence largely mirrors the schema text rather than adding new meaning. 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 ('List web part pages') and immediately scopes the return to metadata only, which separates it from content-returning siblings like get_page. The PRO+ qualifier adds useful tier context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains how to choose the projectId value (omit for org pages, pass for project pages), but that is parameter guidance rather than tool-selection guidance. It never says when to use this versus get_page, list_wiki_pages, or list_documents, so alternatives are left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_portfoliosA
Read-onlyIdempotent
Inspect

List every portfolio in the org with owner + project count. Sorted newest first. Requires the BUSINESS+ portfolios plan feature and the org.portfolio.manage permission (default MANAGER+). Use before add_project_to_portfolio to discover candidate portfolios.

NameRequiredDescriptionDefault
limitNoCap on rows. Default 200, max 500.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, non-destructive, and non-open-world behavior. The description adds useful context beyond that: the BUSINESS+ portfolios plan requirement, the org.portfolio.manage permission with MANAGER+ default, and the newest-first sort behavior. It does not discuss pagination or truncation, but the limit parameter's schema covers that.

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 front-loaded with a distinct fact: what is returned, sort order, prerequisites, and where to use it. No filler or repeated 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 list tool with rich annotations, one fully documented parameter, and no output schema, the description covers everything an agent needs: contents, sort, prerequisites, and when to call it. 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?

Schema coverage is 100%, and the single limit parameter already documents its default (200) and max (500). The description adds no parameter-specific guidance, so the 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 portfolios) and adds the scope and returned fields (owner + project count), plus default sort order. It also names the sibling it feeds into (add_project_to_portfolio), so an agent can distinguish it from get_portfolio, portfolio_summary, or create_portfolio 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?

Explicitly says to use it before add_project_to_portfolio to discover candidate portfolios, and states the required plan feature and permission/default role. It gives clear positive context but does not spell out when-not to use it or name alternative discovery tools, so it falls short of the top bar.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_projectsA
Read-onlyIdempotent
Inspect

List the projects in the user's Onplana workspace, with status and dates. Fits "what projects do I have", "how are my projects doing" and finding the project a request refers to. To FIND A PROJECT BY NAME, pass search (case-insensitive substring on the name) rather than listing everything and matching client-side, which silently misses projects past limit in orgs with more projects than one page. Also filters by status and customFields. Returns up to limit projects ordered by most recently updated; total is how many MATCH (not just this page), and when truncated is true pass nextCursor back as cursor for the next page. Non-admin users only see projects they own or are a member of. On a first connect to a new org, whoami + describe_capabilities + describe_schema ground caller identity, available tools and entity shapes, which the list_* tools all read against. Each project carries autoSchedule; false means edits and links there move no other task. And parentDatesFromSubtasks, the default for a task with subtasks, and retainedLogic, whether a late predecessor pushes a started task. Archived projects are hidden unless includeArchived is true; an archived project carries archivedAt and is read-only until it is unarchived.

NameRequiredDescriptionDefault
limitNoMax projects to return per page (1-50). Default 20. Use cursor to page further.
cursorNoLast-id pagination cursor from a prior call's nextCursor.
searchNoCase-insensitive substring match on the project name. Use this to look a project up by name instead of paging the whole org.
statusNoOptional: only return projects with this status.
customFieldsNoFilter by custom-field value(s); multiple entries are ANDed. Each entry is { fieldId, op, value? }. Ops must be valid for the field type , numeric (NUMBER/CURRENCY/RATING): eq/gt/gte/lt/lte/isNotEmpty; DATE: eq/before/after/isNotEmpty; text/DROPDOWN: eq/contains/isNotEmpty; MULTI_SELECT: contains/isNotEmpty; CHECKBOX: isChecked/isUnchecked (unchecked includes never set). Omit value for isNotEmpty, isChecked and isUnchecked. No neq / isEmpty. Get field ids from list_custom_field_defs.
includeArchivedNoAlso list archived (read-only) projects. Default false.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond read-only annotations, it discloses non-admin visibility restrictions, archived-project read-only behavior, pagination truncation semantics, total vs page counts, and project-level scheduling flags. These are behavioral details an annotations-only view would not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is front-loaded with the core purpose and main usage distinction. However, it is dense and includes tangential guidance about bootstrap tools and project scheduling internals that, while useful, make it longer than necessary for selecting this tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and six optional parameters, the description still covers return ordering, pagination, permissions, archived visibility, and key project fields. It gives enough context for an agent to call and interpret the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents each parameter. The description adds useful operational meaning around `search` preventing missed projects past `limit`, and links `total`/`truncated` to cursor paging, but it largely echoes schema details for `customFields` and filtering.

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?

It states a specific verb and resource ('List the projects in the user's Onplana workspace') and adds the returned fields ('status and dates'). It also distinguishes the tool from name lookup by directing callers to `search`, making the intended operation clear even among many list_* siblings.

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 gives explicit use cases ('what projects do I have', 'how are my projects doing', finding a project) and explicitly routes name lookup to `search` rather than client-side matching. It also documents filter use, archived inclusion, pagination, and first-connect grounding with whoami/describe_capabilities/describe_schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_proposal_reviewsA
Read-onlyIdempotent
Inspect

List all reviews submitted on a governance proposal (gate-by-gate decision history). Visibility: reviewers see all; non-reviewers see only reviews on proposals they submitted. PREFER get_proposal when you also need the gate-approval (quorum) rows. Plan gate: governance (ENTERPRISE+).

NameRequiredDescriptionDefault
proposalIdYes

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 genuinely useful behavior beyond the structured fields: reviewer vs non-reviewer visibility scoping and the ENTERPRISE+ plan requirement. It does not describe pagination or result size.

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, then visibility, then routing to the alternative, then the plan gate. Four dense clauses, none redundant, ordered by importance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read tool with no output schema, the description covers scope, visibility, routing, and prerequisites. The main gap is that it does not hint at the shape of the returned review records, which the absence of an output schema leaves undocumented.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and there is a single required parameter, so the description carries the burden of explaining it. It only implies that proposalId refers to 'a governance proposal' without stating accepted format or where to obtain it, so it partially but not fully compensates.

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) plus resource (reviews on a governance proposal) and clarifies scope with the parenthetical '(gate-by-gate decision history)'. It explicitly distinguishes itself from the sibling get_proposal, so an agent can tell the two apart without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit routing: 'PREFER get_proposal when you also need the gate-approval (quorum) rows,' naming the alternative and the condition that selects it. It also gives a prerequisite ('Plan gate: governance (ENTERPRISE+)') and visibility constraints, though it stops short of a full when-not-to-use statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_proposalsA
Read-onlyIdempotent
Inspect

List governance proposals. Non-reviewers (no org.governance.review) see only their own submissions; reviewers see all in the org. Optional filters: stage, priority, riskLevel, submittedById, title (case-insensitive substring), sortBy + sortOrder, cursor (last id). Returns up to 100 per call. PREFER get_proposal for full detail on one row; PREFER list_gate_approvals for the per-user gate-approval inbox.

NameRequiredDescriptionDefault
limitNoDefault 25, max 100.
stageNo
titleNoCase-insensitive substring match.
cursorNoLast-id pagination cursor.
sortByNo
priorityNo
riskLevelNo
sortOrderNo
submittedByIdNo

TDQS

A4.8/5.0
Behavior5/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 goes further by disclosing the authorization-based row visibility, the 100-per-call return ceiling, and cursor pagination. That is exactly the kind of behavior 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 dense sentences with no filler; the access-scoping rule is front-loaded, filters follow, and alternatives come last. Every clause carries actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter, no-required-arg list tool with no output schema, it covers scope, filters, pagination, and sibling routing. It stops short of indicating default ordering or what fields each returned row contains, which is the only meaningful 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 description coverage is only 33%, so the description must compensate, and it does by enumerating the full filter surface (stage, priority, riskLevel, submittedById, title, sortBy + sortOrder, cursor). Some of that restates schema text (title substring, cursor 'last id'), so it adds breadth more than new per-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?

Opens with a specific verb+resource ('List governance proposals') and immediately adds the distinguishing scope rule: non-reviewers see only their own submissions, reviewers see the whole org. That separates it from get_proposal, list_proposal_reviews, and list_gate_approvals without the agent 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 routes the agent twice: 'PREFER get_proposal for full detail on one row' and 'PREFER list_gate_approvals for the per-user gate-approval inbox'. This tells the agent both when to use this tool (broad filtered listing) and when a sibling is the better pick.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_readiness_criteriaA
Read-onlyIdempotent
Inspect

List the readiness criteria (the definition of done) an organization holds projects to before they are completed or archived. Returns the org's own criteria when it has any for the transition, otherwise the platform preset set that applies, each with its check kind (auto, manual, ai), whether it is required, and its auto rule. presetSet browses a named preset set, or all of them, instead of the set that applies. Readable by every org member.

NameRequiredDescriptionDefault
presetSetNoOptional. Browse one preset set, or all, in place of the set that applies.
transitionNoCOMPLETE (the default) checks the criteria for completing the project; ARCHIVE the criteria for archiving it.
projectTypeNoOptional. Only criteria for this project type, plus the untyped ones.

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 bar is lower. The description still adds real value beyond them: the org-vs-preset fallback resolution rule, the per-criterion return contents (check kind, required flag, auto rule), and an access note ('Readable by every org member').

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the core definition, then fallback behavior, then the override and access note. Efficient overall, though the presetSet sentence duplicates schema wording and could be trimmed.

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 appropriately carries the return shape (check kind, required, auto rule) plus the resolution logic and read permissions. 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%, so the baseline is 3. The description's presetSet sentence largely restates the schema text ('Browse one preset set, or all, in place of the set that applies'), adding no syntax or semantics 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?

States a specific verb (List) and a well-defined resource (readiness criteria / definition of done), with scope: criteria an org holds projects to before completion or archive. This clearly separates it from siblings like get_readiness_status and run_readiness_check, which operate on status/execution rather than the criteria catalog.

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 default resolution path (org's own criteria, else the platform preset) and the presetSet override give implied usage context, but the description never says when to reach for this tool versus get_readiness_status or run_readiness_check, nor does it state prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_recent_activityA
Read-onlyIdempotent
Inspect

List recent activity (task creates / updates / status changes / comments / dependency edits) for one project since a given timestamp. Returns up to 100 ActivityLog rows newest-first with actor + entity + action so an agent that just reconnected can catch up on what changed while it was offline. Time window capped at 30 days; for older history use list_audit_log instead. Each item includes entityTitle (the changed entity's current title, so you know WHICH task, project, change request, proposal, issue, page or idea changed without a per-row lookup; null when that entity has since been deleted or moved out of this project) and changedFields (the field names that changed, when recorded). Page and idea rows the caller cannot open are left out, details included, rather than returned with a null title, so a response can hold fewer than limit items and still report hasMore.

NameRequiredDescriptionDefault
limitNoDefault 25, max 100.
sinceYesISO timestamp. Returns events with createdAt >= since.
projectIdYesProject to scope to. Required.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

While annotations confirm it is read-only and idempotent, the description adds critical operational context that goes beyond simple hints. It explains the return structure ('actor + entity + action'), the specific fields provided (entityTitle, changedFields), and the pagination logic (reporting 'hasMore' even if the limit isn't reached). This is extremely useful for agent behavior design.

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 detailed, which is necessary for a complex logging tool. It is logically structured, starting with the primary function and scoping, followed by output structure details, and concluding with the usage exception. While comprehensive, its length prevents a perfect 5 for 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?

The definition is exceptionally complete. It addresses scope (project, timestamp), limits (100 rows, 30 days), output fields (actor, entity, action, entityTitle, changedFields), and how to handle missing data (null title if deleted). Given the complexity of activity logging, this is comprehensive enough for successful invocation and interpretation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is high. The description adds crucial semantic meaning to the output structure, specifically detailing what `entityTitle` represents (the changed entity's current title) and the nature of `changedFields`. This significantly compensates for the structural description, providing deep operational value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the tool's function: 'List recent activity... for one project since a given timestamp.' It clearly identifies the resource (ActivityLog) and the necessary constraints (projectId, since). This is highly specific and leaves no ambiguity regarding the tool's core function.

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 provides a clear exclusion/alternative usage guideline. It specifies a 30-day cap for this tool and directs the agent to use `list_audit_log` for older history, ensuring correct sibling tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_recycle_binA
Read-onlyIdempotent
Inspect

List soft-deleted items in the org recycle bin. Non-privileged callers only see items they themselves deleted; managers/admins see every item. Filter by entityType (project|task|proposal|document) and/or a substring on the title. Newest deletions first.

NameRequiredDescriptionDefault
limitNoCap on rows. Default 50, max 200.
searchNoOptional case-insensitive substring match on title.
entityTypeNoFilter to one entity type. Omit (or pass "all") for every type.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/idempotentHint/destructiveHint=false, so the safety profile is covered. The description goes beyond them by disclosing the permission-based visibility rule (non-privileged callers see only their own deletions) and the sort order (newest deletions first), which are meaningful behavioral traits an agent can't 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 sentences, each earning its place: scope, visibility rule, filters, ordering. Front-loads the resource and outcome; no repetition or 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 list tool with no output schema, the description covers scope, permissions, filters, and ordering adequately. It could mention pagination behavior or the default/max limit handling, but the limit cap is already in the schema, so remaining gaps are 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 description coverage is 100%, so the baseline is 3. The description adds value the schema lacks: it supplies the concrete entityType values (project|task|proposal|document) and the 'all' sentinel, and clarifies the two filters are combinable ('and/or') and that search matches on title.

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 soft-deleted items in the org recycle bin'), which is unambiguous and distinguishes it from every sibling list_* tool (list_documents, list_projects, etc.) since none other targets the recycle bin.

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 result scoping by caller privilege (self-deleted only vs. everything for managers/admins) and enumerates the available filter dimensions, giving clear context for when to reach for this tool. It does not name an alternative or state exclusions, but no sibling competes for this function.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_risksA
Read-onlyIdempotent
Inspect

List project risks visible to the caller. Filters: projectId (optional), severity (LOW/MEDIUM/HIGH/CRITICAL), category (SCHEDULE/RESOURCE/BUDGET/SCOPE/EXTERNAL), includeDismissed (default false). Returns up to 50 risks per call, ordered by severity descending then most-recent first. Each risk carries url, its link in the Onplana web app.

NameRequiredDescriptionDefault
limitNoDefault 25, max 50.
categoryNo
severityNo
projectIdNoOptional - restrict to one project.
includeDismissedNoDefault false.

TDQS

A3.9/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 safety, so the bar is lower, and the description adds real behavioral context: a 50-per-call cap, ordering (severity descending, then most-recent first), and the presence of a url field per risk. It does not say what happens when more than 50 risks exist (no pagination/cursor behavior described), 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?

A single dense paragraph that is front-loaded with purpose, then filters, then return behavior, then output detail. Every clause carries information and there is no filler or repetition of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully documents return size, ordering, and the url field, which is more than most list tools provide. It still leaves pagination/overflow behavior and the limit parameter ambiguous, which matters for a capped 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?

With 60% schema coverage, the description compensates by naming the enum values for severity and category and the default for includeDismissed, adding meaning beyond the bare enum lists. However it omits the `limit` parameter entirely while claiming 'up to 50 risks per call', which can mislead an agent about the actual default of 25.

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 project risks') and adds a scope qualifier ('visible to the caller') that hints at permission-based filtering. It does not name the obvious siblings (list_org_risks, analyze_project_risks, compute_risk_patterns) to disambiguate project-scope from org-scope listing, 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 filter list (projectId, severity, category, includeDismissed) rather than stated. There is no explicit 'use this when... / use X instead when...' guidance against sibling risk-listing or risk-analysis tools, leaving the agent to infer selection criteria on its own.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_sharepoint_sitesA
Read-onlyIdempotent
Inspect

List SharePoint sites the authorized user can read. Default returns followed sites; pass search to walk the tenant index. Requires Sites.Read.All delegated scope.

NameRequiredDescriptionDefault
topNo
searchNo

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), so the bar is lower; the description still adds the required Sites.Read.All delegated scope, which no annotation conveys. It does not disclose result limits or paging behavior, keeping it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core action, then the mode distinction, then the auth prerequisite. 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 adequately implies a list of sites and covers auth scope and mode switching. It omits the meaning of 'top' and any return/pagination detail, which is a minor gap for a simple two-parameter list 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 0% and neither parameter is described in the schema. The description explains 'search' well (walks the tenant index) but says nothing about 'top', implying a page-size/count semantic that is left to guesswork. Partial compensation only.

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 (SharePoint sites), plus a scope qualifier ('the authorized user can read'). It also distinguishes its two modes (default followed sites vs. search-driven tenant walk), so an agent can tell it apart from siblings like list_libraries or import_sharepoint_list_projects 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 tells the agent when each behavior applies: omit 'search' to get followed sites, pass 'search' to walk the tenant index. That is clear mode-selection guidance, though it names no alternative sibling tool for the 'find sites elsewhere' case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_sprintsA
Read-onlyIdempotent
Inspect

List sprints in a project. Filter by status (PLANNING/ACTIVE/COMPLETED/CANCELLED). Cursor pagination (last-id). Returns id, name, goal, status, startDate, endDate, taskCount per row. Plan gate: sprints (PRO+).

NameRequiredDescriptionDefault
limitNoDefault 50, max 100.
cursorNo
statusNo
projectIdYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds several critical behavioral details beyond the read-only hint provided in the annotations. It specifies the pagination mechanism ('Cursor pagination (last-id)'), lists all returned fields (id, name, goal, taskCount, etc.), and discloses a feature gating requirement ('Plan gate: sprints (PRO+)').

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 extremely concise, front-loading the primary action and key constraints (filter, pagination, return fields) without unnecessary filler. It uses efficient language to convey complex operational details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite not having an output schema, the description is remarkably complete. It details the required input scoping (project), the available filtering options, the navigational method (cursor pagination), and the output structure (field names). Nothing essential is missing for successful invocation.

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?

Given the low schema coverage (25%), the description provides essential semantic context that compensates heavily. It confirms the exact data structure and contents of the return value, specifies the cursor usage, and lists all available status filters, which is critical information for the agent.

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: 'List sprints in a project.' It uses a specific verb ('List') and names the exact resource ('sprints'), immediately distinguishing it from other list tools like list_tasks or list_issues.

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 provides clear contextual guidance by outlining the valid filters (PLANNING/ACTIVE/COMPLETED/CANCELLED). While it doesn't explicitly state 'use this instead of X,' the action verb 'List' strongly implies it is for batch retrieval, contrasting with a potential single-sprint lookup tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_subprojectsA
Read-onlyIdempotent
Inspect

The projects inserted into a project as subprojects (its master schedule), in the order its Gantt shows them. Each has its span, start and finish (YYYY-MM-DD), the earliest start and latest finish of its tasks; null when it has no dates. The parent project's schedule holds each subproject fixed at that span and finishes no earlier than its latest one; a subproject's own schedule never moves for its parent. position places it among the parent's top-level tasks by their order. Access: anyone who can read the project.

NameRequiredDescriptionDefault
projectIdYesThe parent project.

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the read-only annotations, the description explains how spans are computed, null date behavior, how the parent schedule treats subprojects, that a subproject's own schedule does not move for its parent, and ordering via position. These are substantive behavioral details an agent would not get from annotations alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but well organized, starting with the returned resource and then adding span, schedule, position, and access details. Every sentence contributes, though the scheduling explanation is somewhat heavy for a list tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema and only one required parameter, so the description carries the return semantics and does so thoroughly. It covers span fields, null handling, parent/child scheduling behavior, ordering, and access, leaving little ambiguity 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?

The single projectId parameter is fully described in the schema as the parent project, and the description reinforces that framing. With schema coverage at 100%, this meets the baseline without adding format or edge-case 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 specifically identifies the resource as the projects inserted into a project as subprojects and explains that they are returned in Gantt order with their spans. This clearly distinguishes it from siblings like list_projects, insert_subproject, and get_subtree.

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 the tool is for reading a parent project's subproject list and explains access, but it does not explicitly say when to use this versus list_projects, get_subtree, or insert_subproject. Usage is inferable rather than directly guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_tagsA
Read-onlyIdempotent
Inspect

List every org-scoped tag with usage counts. Returns id, name, color, and counts of tasks + projects each tag is applied to. Sorted by name. Use before create_tag to avoid duplicates or to discover what tags exist.

NameRequiredDescriptionDefault
limitNoOptional cap on rows. Default 500 (org tag pools rarely exceed this).

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds value beyond the structured fields by naming the returned fields, the sort order, and the org-scoping constraint. It stops short of describing pagination or the limit's interaction with the default, so a 4 rather than 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each carrying distinct load: what it lists, what it returns, and when to use it. The routing guidance is placed last and nothing is padded.

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 enumerates the returned fields (id, name, color, task and project usage counts) and the ordering, which is exactly what an agent needs to consume the result. Nothing material is missing for a single-optional-param read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the single 'limit' parameter is fully documented in the schema, including its default of 500. The description adds no parameter syntax or format detail, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

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 org-scoped tag with usage counts') plus the exact scope ('org-scoped'), which separates it from assign_tag/unassign_tag/create_tag without the schema being opened.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the alternative and the selecting condition: 'Use before create_tag to avoid duplicates or to discover what tags exist.' This tells the agent both when to reach for it and which sibling it pairs with.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_task_attachmentsA
Read-onlyIdempotent
Inspect

List the attachments on a task (metadata only: id, fileName, mimeType, size, uploader, createdAt). Use read_task_attachment to fetch the content of one. Caller must have visibility into the parent project.

NameRequiredDescriptionDefault
taskIdYesThe task id.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description still adds value by clarifying that only metadata is returned (not file bytes) and that visibility into the parent project is required, though it says nothing about ordering, pagination, or result limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences: what it returns, which sibling to use instead, and the access prerequisite. Nothing is redundant and the core capability 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 effectively substitutes for one by naming the returned fields, and it covers the sibling routing and permission prerequisite. 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 description coverage is 100% for the single taskId parameter, so the schema already carries the parameter documentation. The description adds only implicit meaning (taskId identifies the parent task whose attachments are listed) and no format or constraint details beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('List the attachments on a task') and enumerates the exact returned metadata fields (id, fileName, mimeType, size, uploader, createdAt), which distinguishes it immediately from sibling readers like get_task or list_documents.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent to the alternative ('Use read_task_attachment to fetch the content of one') and states the precondition ('Caller must have visibility into the parent project'), so the metadata-vs-content decision and the access requirement are both resolved in the description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_tasksA
Read-onlyIdempotent
Inspect

List tasks visible to the caller, with optional filters: projectId, parentId (pass "null" string or JSON null for top-level-only), status, assigneeId (or the sentinels "me" / "unassigned"), assignedToAgentPersona, collaboratorId (or "me": tasks a person collaborates on without holding them), title with titleMode ("contains" default, "equals", "startsWith"; all case-insensitive), dueBefore / dueAfter, overdueOnly, includeSubtasks, orderBy. Each row carries collaborators, the people working on it besides its assignee, isManual and datesFromSubtasks (true when its dates come from its subtasks), and url, the task's link in the Onplana web app. Returns up to 200 tasks per call with cursor-based pagination (nextCursor). Set includeSubtasks=true to include matching subtasks at any depth when filtering by status/assignee/title (omitting parentId). PREFER get_plan when you need the whole project tree in one call; PREFER list_assigned_tasks for your own queue. Use list_tasks when drilling parent to children or paginating through a large project. When you pass projectId, the response carries projectResolved: if it is false the id did not match any project visible to you and the empty tasks list says NOTHING about whether that project has work in it, re-check the id (use full ids from list_projects, never abbreviated) rather than concluding the project is empty or unsaved.

NameRequiredDescriptionDefault
limitNoDefault 25, max 200.
titleNoCase-insensitive match on task title. See titleMode for how it matches.
cursorNoLast-id pagination cursor from a prior call's nextCursor.
statusNo
orderByNoDefault 'dueDate'. Combined with priority desc as secondary.
dueAfterNoISO date - show tasks due after this date.
parentIdNoParent task id, "null" string, or JSON null for top-level-only.
dueBeforeNoISO date - show tasks due before this date.
projectIdNoOptional - restrict to one project.
titleModeNoHow title is matched: 'contains' (default), 'equals', or 'startsWith'. All case-insensitive.
assigneeIdNoShow tasks assigned to one user. Special values: 'me' (the caller), 'unassigned' (no assignee).
overdueOnlyNoWhen true, only return tasks past their due date and not DONE.
customFieldsNoFilter by custom-field value(s); multiple entries are ANDed. Each entry is { fieldId, op, value? }. Ops must be valid for the field type , numeric (NUMBER/CURRENCY/RATING): eq/gt/gte/lt/lte/isNotEmpty; DATE: eq/before/after/isNotEmpty; text/DROPDOWN: eq/contains/isNotEmpty; MULTI_SELECT: contains/isNotEmpty; CHECKBOX: isChecked/isUnchecked (unchecked includes never set). Omit value for isNotEmpty, isChecked and isUnchecked. No neq / isEmpty. Get field ids from list_custom_field_defs.
collaboratorIdNoOnly tasks this user collaborates on (works on without holding). Special value: 'me' (the caller).
includeSubtasksNoWhen true, include matching subtasks at any depth (not just top-level). Default false.
assignedToAgentPersonaNoWhen true, only return tasks whose assignee is an agent persona ("what are the agents working on").

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, yet the description still adds real behavioral context: the 200-row cap, cursor-based pagination via nextCursor, the extra row fields (collaborators, isManual, datesFromSubtasks, url), the includeSubtasks depth semantics, and the projectResolved caveat that an empty list does not mean an empty project. It stops short of describing the full return envelope, but that is a minor gap against a tool whose safety profile is already 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?

Purpose is front-loaded, then filters, then return shape, then routing alternatives and the projectResolved caveat – a sensible order. It is one dense paragraph rather than broken into lines, so the routing and caveat clauses are easy to skim past, but no sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 16-parameter, zero-required filtering tool with no output schema, the description supplies pagination, return fields, sentinel values, the parentId/subtask interaction, and the misleading-empty-result warning. Nothing an agent needs to call it correctly or interpret its output 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 94%, so the baseline is 3, but the description earns a step up by adding semantics the schema only partially carries: the 'me' / 'unassigned' sentinels, the "null"/JSON-null parentId distinction for top-level-only, case-insensitive titleMode, and the cross-parameter rule that includeSubtasks only recurses when parentId is omitted. The customFields operator matrix is left entirely to the schema, which is acceptable given its own long 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 specific verb+resource (list tasks visible to the caller) and immediately enumerates the filter space, so the agent knows exactly what the tool returns. It also explicitly distinguishes itself from get_plan and list_assigned_tasks, which is the sibling-routing signal the agent needs.

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 alternatives and the conditions that select them: PREFER get_plan for a whole project tree in one call, PREFER list_assigned_tasks for your own queue, and use list_tasks when drilling parent to children or paginating large projects. It also names a concrete failure mode (projectResolved=false) and prescribes the remedy.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_team_membersA
Read-onlyIdempotent
Inspect

List members of a SPECIFIC project (NOT the whole organization — use list_org_members for that). Returns user id + name + role (OWNER / MANAGER / MEMBER / CONTRIBUTOR / VIEWER, plus any custom roles your org has defined). The project owner is always included as the first row with role=OWNER, regardless of ProjectMember table entries.

NameRequiredDescriptionDefault
projectIdYesProject to list members for.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, so the safety profile is covered. The description adds real value beyond that: it discloses the return shape (user id + name + role), enumerates the possible role values plus custom roles, and reveals a non-obvious behavioral quirk — the project owner is always injected as the first row with role=OWNER regardless of ProjectMember table entries. Pagination behavior is the only notable omission.

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 scope and the sibling exclusion. Every clause earns its place — scope, return shape, and the owner-insertion edge case are all actionable. 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?

With no output schema, the description carries the return-value burden and does so: field list, role enumeration, and the owner-first ordering quirk. Combined with annotations covering the safety profile and a 100%-covered single required parameter, 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?

The single projectId parameter is fully documented in the schema (100% coverage) and is required, so the baseline is 3. The description reinforces the scope of the id ('SPECIFIC project') but adds no format, sourcing, or constraint detail beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (members of a SPECIFIC project), and immediately scopes the resource so it cannot be confused with organization-wide listings. It names the sibling it is not (list_org_members), 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 gives the when-not condition ('NOT the whole organization') paired with the alternative to use instead ('use list_org_members for that'). This is a textbook routing instruction that removes ambiguity among a large family of list_* siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_teamsA
Read-onlyIdempotent
Inspect

List teams in this org. Returns id, name, description, memberCount, createdAt per row. PREFER get_team for full member detail.

NameRequiredDescriptionDefault
limitNoDefault 50, max 100.
cursorNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuinely new context by specifying the per-row return shape (id, name, description, memberCount, createdAt), which matters because there is no output schema; it does not, however, mention pagination behavior for the cursor.

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 purpose, then the return shape, then the routing hint. Every sentence carries information and 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 correctly supplies the row fields an agent needs to consume the result. The remaining gap is pagination semantics for cursor, which is unaddressed in both the description and the schema.

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 50%: limit is documented in the schema ('Default 50, max 100') but cursor has no description anywhere. The description text adds nothing about parameters or pagination, so the undocumented half is left entirely 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?

States a specific verb and resource with scope: 'List teams in this org'. It also names the sibling it is not (get_team) and enumerates the returned fields, so an agent can distinguish it from get_team and list_team_members 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?

'PREFER get_team for full member detail' gives an explicit alternative and the condition that selects it. It does not address the other nearby option (list_team_members) or state when listing is the right choice versus fetching a single team by id, so 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.

list_templatesA
Read-onlyIdempotent
Inspect

List project templates visible to the caller: this org's templates plus globally-public templates (organizationId null). Returns id, name, description, category, isPublic, usageCount, createdById, createdAt per row. Plan gate: templates (PRO+).

NameRequiredDescriptionDefault
limitNoDefault 50, max 100.
cursorNo
categoryNoOptional category filter.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly/idempotent/non-destructive/closed-world, so the safety profile is handled. The description adds real value beyond that: the exact visibility rule (org + global), the per-row return fields (compensating for no output schema), and a plan gate (PRO+).

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 scope, then lists return fields and the plan gate in compact sentences; nearly every clause earns its place. Slightly dense but no wasted filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, enumerating the returned fields is exactly what's needed, and the plan gate plus visibility rule round out the picture. Minor gap: pagination behavior beyond the cursor/limit defaults is not explained.

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 already documents limit (default 50, max 100) and category. The description adds nothing about limit, cursor, or category semantics, so it does not compensate for the undocumented cursor parameter. Baseline 3 at this coverage level.

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 + scope: lists project templates and precisely defines the visible set (this org's plus globally-public with organizationId null). This clearly distinguishes it from get_template, instantiate_template, and save_project_as_template.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives useful context (visibility scope, PRO+ plan gate) but never states when to prefer this over alternatives like get_template or find_similar_projects, and offers no explicit exclusions. 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.

list_timesheet_approversA
Read-onlyIdempotent
Inspect

List the designated timesheet approver roster for the current org. Feature: timeTracking (PRO+).

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered. The description contributes the org-scoping and the PRO+ feature requirement, but says nothing about the return shape or empty-roster behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no filler; the purpose is front-loaded and the feature-gate caveat follows immediately. Every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only list tool with no output schema, the description covers what the tool returns (a roster of designated approvers) and the org scope. It could be slightly more complete by noting the empty-result case, but 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?

The tool takes zero parameters, so per the rubric the baseline is 4. There is nothing for the description to disambiguate, and the 'current org' phrasing usefully clarifies the implicit scope of the call.

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 designated timesheet approver roster') scoped to the current org, which clearly separates it from the mutation sibling add_timesheet_approver. It stops short of explicitly naming that sibling or contrasting scopes, so it falls just short of 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the use case (reading the approver roster) and adds a real usage constraint via the feature gate (timeTracking, PRO+), which tells the agent the call may fail on lower tiers. However, it never states when to prefer this over related tools or what the caller should do if the feature is unavailable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_timesheet_entriesA
Read-onlyIdempotent
Inspect

List timesheet entries. Members see their own entries by default; managers / approvers can pass userId to see anyone's, or omit userId to get the org-wide cut. Filter by weekStart (Monday-based 7-day window) OR startDate+endDate (arbitrary range). Status filter accepts a single string or array (DRAFT / SUBMITTED / APPROVED / REJECTED). total is how many entries match, which can exceed the rows returned; truncated says so. Requires the PRO+ timeTracking plan feature.

NameRequiredDescriptionDefault
limitNoCap on rows. Default 200, max 500.
statusNoOne or more status filters
userIdNoTarget user id (members are restricted to self)
endDateNoISO date exclusive (use with startDate)
startDateNoISO date inclusive (use with endDate)
weekStartNoISO date for the week's Monday

TDQS

A4.9/5.0
Behavior5/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 adds material context beyond them: the member/manager permission model, the PRO+ timeTracking plan gating requirement, and truncation/total semantics. These are behaviors 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?

Dense and front-loaded: purpose first, then visibility rules, filter modes, status values, and return semantics in logical order. Every sentence carries load; 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 compensates by explaining total and truncated, and it flags the plan prerequisite. Combined with full schema coverage, an agent has everything needed to invoke and interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds value beyond it: it names the concrete status values (DRAFT/SUBMITTED/APPROVED/REJECTED) absent from the schema's enum-less oneOf, explains weekStart as a Monday-based 7-day window, and clarifies the OR relationship between the two date modes.

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 (timesheet entries) and immediately clarifies scope of data returned. An agent can distinguish this from sibling tools like list_timesheet_approvers or create_timesheet_entry without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly describes when the tool returns own vs org-wide entries based on role and whether userId is passed, and lays out the two mutually exclusive filtering modes (weekStart vs startDate+endDate). This is genuine when-to-use and alternative-selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_webhook_deliveriesA
Read-onlyIdempotent
Inspect

List recent delivery attempts for a webhook (success or failure). Returns id, event name, HTTP statusCode, success boolean, duration ms, response body, createdAt. Newest-first. Plan gate: webhooks (BUSINESS+).

NameRequiredDescriptionDefault
limitNoDefault 50, max 100.
cursorNo
successNoFilter to only successful or only failed deliveries.
webhookIdYes

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely new behavioral context: the ordering ('Newest-first'), the fact that a plan gate (BUSINESS+) is required, and that both successes and failures are returned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences, front-loaded with purpose, then return shape, then ordering and plan gate. No filler, though the return-field list is dense and could be ordered slightly more logically.

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 returned fields, plus ordering and the plan gate. The main uncovered area is pagination/cursor behavior, which matters for a newest-first list tool.

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 50% (cursor and webhookId are undocumented), so the description carries some burden. It adds no parameter meaning beyond 'Newest-first' loosely hinting at cursor ordering, and says nothing about limit, cursor semantics, or the success filter syntax.

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 recent delivery attempts for a webhook') and clarifies scope with '(success or failure)'. It is largely distinguishable from siblings like list_webhook_events and get_webhook, though it never names them, leaving a small risk of confusion with the events tool.

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 'recent delivery attempts' and the stated plan gate ('webhooks (BUSINESS+)'), but there is no explicit when-to-use vs when-not, nor a pointer to alternatives such as list_webhook_events or test_webhook. Adequate but with clear gaps.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_webhook_eventsA
Read-onlyIdempotent
Inspect

List the webhook event types the platform supports. Use this to discover valid values for the events array on create_webhook and update_webhook. Pure read, no org / plan gate.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly/idempotent/destructive, but the description adds auth context beyond them: 'Pure read, no org / plan gate', which tells the agent no entitlement check blocks the call. Minor gap: the annotation title advertises 'recent dispatch metadata' that the description never mentions or explains.

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 immediately followed by the routing guidance. Every sentence earns its place with no preamble or 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 zero-param discovery tool with no output schema, the description covers what the tool returns conceptually (valid event type values) and who needs it. It stops short of describing the return shape or whether the list is paginated/cached, but little else is required.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters with 100% schema coverage, so the baseline of 4 applies. The description correctly signals a no-argument enumeration, leaving nothing for parameter semantics to compensate for.

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 ('webhook event types the platform supports'), and the scope makes it distinguishable from list_webhooks, get_webhook, and list_webhook_deliveries. An agent immediately understands this enumerates a static vocabulary of event types.

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 when to use it ('to discover valid values for the `events` array on `create_webhook` and `update_webhook`'), routing the agent to the prerequisite step before those write tools. No alternatives or exclusions are left ambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_webhooksA
Read-onlyIdempotent
Inspect

List webhook subscriptions in this org. Returns id, name, url, events, isActive, lastTriggeredAt, failCount. PREFER get_webhook for the secret + audit fields. Plan gate: webhooks (BUSINESS+).

NameRequiredDescriptionDefault
limitNoDefault 50, max 100.
cursorNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered; the description adds value with the plan/tier gate and the exact field set returned (including lastTriggeredAt and failCount), which hints at delivery-health semantics. It doesn't cover pagination behavior (what happens when more than `limit` webhooks exist), which is the remaining behavioral gap for a list 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, front-loaded sentences with zero filler: purpose first, return shape second, routing and gating last. Every clause 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?

There is no output schema, so the description correctly enumerates the returned fields, and the plan gate covers the failure mode an agent would otherwise hit blind. What's missing is pagination guidance for a 2-param list endpoint (cursor semantics), the main thing an agent could still get wrong.

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%: `limit` is well documented in the schema (default 50, max 100) but `cursor` has no description anywhere, and the description says nothing about paging or how to use the cursor. It neither compensates for the gap nor adds meaning beyond the schema, so a mid-range score 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 with scope ("List webhook subscriptions in this org"), and the return-field enumeration makes clear it is the collection view, not a single-resource read. An agent can distinguish it from get_webhook and from list_webhook_deliveries/list_webhook_events 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 routes the agent: "PREFER get_webhook for the secret + audit fields," which names the alternative tool and the condition that selects it. It also discloses the entitlement prerequisite ("Plan gate: webhooks (BUSINESS+)"), so an agent knows when the call will be rejected rather than silently failing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_whiteboardsA
Read-onlyIdempotent
Inspect

List whiteboards in a project or proposal scope (elements + appState omitted from the list to keep payload small; use get_whiteboard). Plan gate: whiteboards (PRO+).

NameRequiredDescriptionDefault
limitNoDefault 50, max 100.
cursorNo
projectIdNo
proposalIdNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare the safe read profile (readOnlyHint, idempotentHint, non-destructive), so the description's job is to add beyond that. It does: the payload-slimming behavior (elements + appState stripped) and the PRO+ entitlement gate are non-obvious traits an agent would otherwise not know.

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 tight sentence with the core action front-loaded, then the payload caveat, the alternative tool, and the gating constraint in descending order of importance. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-required-param list tool with no output schema and annotations covering safety, the description covers scope, payload trimming, the alternative tool, and entitlements. The remaining gap is pagination/cursor behavior and the projectId/proposalId relationship, which is a minor omission rather than a blocking one.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25% (only limit is documented), so the description carries some burden. It frames the two scoping parameters as 'project or proposal scope', implying an either/or selector, but never states whether projectId/proposalId are mutually exclusive or required, nor what cursor means. Partial compensation only.

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 whiteboards') plus the scope ('project or proposal'), and explicitly distinguishes itself from get_whiteboard by noting that elements + appState are omitted. An agent can tell instantly what this returns and how it differs from the sibling that fetches a full whiteboard.

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 clear routing signals: use this for lightweight listing, and use get_whiteboard when full element/appState data is needed; also flags the PRO+ plan gate. It stops short of explicit guidance on when to choose projectId vs proposalId or when to paginate, so it is clear context rather than full when/when-not coverage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_wiki_pagesA
Read-onlyIdempotent
Inspect

List wiki pages in a project or proposal scope. Pass parentId="null" to return only top-level pages. Returns id, title, icon, order, parentId, hasContent (true when yDocState is populated). Plan gate: wikis (PRO+).

NameRequiredDescriptionDefault
limitNoDefault 100, max 200.
cursorNo
parentIdNo"null" string = top-level only.
projectIdNo
proposalIdNo

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, non-destructive and non-openWorld behavior. The description adds beyond that: the exact top-level filter rule (parentId='null'), the returned fields, the hasContent meaning tied to yDocState, and the PRO+ plan gate, though it still omits pagination 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?

Four front-loaded sentences, each carrying distinct information: purpose, top-level filtering, return shape, and plan gate. There is no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully enumerates returned fields and explains hasContent, while annotations cover the safety profile. The main omission is pagination/cursor behavior, but for a scoped list tool this is a minor gap.

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 40% (limit and parentId are described; cursor, projectId, proposalId are not). The description repeats parentId's schema rule and hints at project/proposal scope, but it never explains cursor pagination or expands on limit, so it does not compensate for the low 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 ('List') and resource ('wiki pages') with a clear project-or-proposal scope, so it is distinguishable from get_wiki_page, create_wiki_page and update_wiki_page. It does not explicitly differentiate from the sibling list_pages, so a 4 rather than a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides scope ('in a project or proposal scope') and a plan gate, implying it is for enumerating wiki pages within a known container. It does not state when to prefer it over list_pages or get_wiki_page, nor any exclusions, 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.

list_workflow_approvalsA
Read-onlyIdempotent
Inspect

Caller's workflow-approval inbox (WorkflowApproval rows). Default status=PENDING (your queue: approvals whose run is still waiting on that step). Pass approverId to inspect another user's queue (admins). PREFER decide_workflow_approval to act on a PENDING row. Plan gate: automations (PRO+).

NameRequiredDescriptionDefault
limitNoDefault 50, max 100.
statusNo
approverIdNo

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds real context beyond that: the default PENDING scoping, the admin-only approverId behavior, the WorkflowApproval return type, and a PRO+ plan gate requirement.

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 fragments, each earning its place: identity, default behavior, alternate scope, preferred alternative, plan gate. Front-loaded with the resource 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?

No output schema exists, and the description names the returned row type, which is the key return context. Pagination is only implied via the limit param in the schema; a note on ordering or result size would complete it, but nothing essential for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33%: limit is documented inline but status and approverId are bare in the schema. The description compensates by explaining status's PENDING default and the admin-scoped meaning of approverId, adding genuine meaning beyond the structured fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (the caller's workflow-approval inbox / WorkflowApproval rows) and immediately distinguishes it from the action sibling decide_workflow_approval. An agent can tell this is the read/list side of workflow approvals without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says the default is status=PENDING and what that means (your queue), gives the alternative path for inspecting another user's queue via approverId (admins only), and names the tool to prefer for acting on a row. When-to-use and when-to-use-something-else are both covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_workflow_runsA
Read-onlyIdempotent
Inspect

List workflow run history. Filter by workflowId, projectId, status (RUNNING / WAITING_DELAY / WAITING_APPROVAL / SUCCESS / FAILED / CANCELLED). Returns id, workflowId, status, event, taskId, startedAt, finishedAt, resumeAt, error per row. Cursor pagination. PREFER list_workflow_approvals for the decide-now inbox; PREFER cancel_workflow_run to abort an in-flight run. Plan gate: automations (PRO+).

NameRequiredDescriptionDefault
limitNoDefault 50, max 100.
cursorNo
statusNo
projectIdNo
workflowIdNo

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds real value beyond that: it discloses the per-row return shape, cursor pagination, and the PRO+ plan gate requirement. No contradictions; it stops short of rate-limit or retention details, which keeps it just 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?

Purpose is front-loaded, followed by filters, return fields, pagination, alternatives, and plan gate, each in a compact clause. No filler sentences; every clause carries actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by listing the returned fields per row, and it covers filtering, pagination, sibling routing, and a plan gate. An agent has everything needed to call this filtered-list tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 20% (just limit), so the description must carry the load, and it largely does: it enumerates workflowId, projectId, and the full status enum, and notes cursor pagination. Only 'limit' is left to the schema, making this solid compensation for the low coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List workflow run history') and immediately distinguishes the tool from siblings by naming list_workflow_approvals and cancel_workflow_run as different intended uses. An agent can identify this tool without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: 'PREFER list_workflow_approvals for the decide-now inbox; PREFER cancel_workflow_run to abort an in-flight run,' and adds a plan-gate note ('automations (PRO+)'). It states both when to use this tool and when to prefer alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_workflowsA
Read-onlyIdempotent
Inspect

List workflows in the org. Returns each workflow's name, description, isActive, projectId (null = org-wide), runCount, maxRuns, triggerEvent, lastRunAt. Pass projectId to scope to one project (or omit for org-wide + every project). Pass entity and entityId to list the workflows set up on one project, task, document, library or list. PREFER get_workflow for the full graph + steps definition. Plan gate: automations (PRO+).

NameRequiredDescriptionDefault
limitNoDefault 50, max 100.
cursorNo
entityNoThe kind of thing entityId names. Use with entityId.
entityIdNoThe id of the project, task, document, library or list. Use with entity.
isActiveNo
projectIdNo

TDQS

A4.6/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 the bar is lower. The description adds genuine value beyond that: the returned field set, the plan gate ('automations (PRO+)'), and the null-vs-org-wide semantics of projectId. No return-format or pagination detail, but coverage is solid.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but well front-loaded: purpose, then return fields, then parameter guidance, then the sibling alternative last. Every clause earns its place; the return-field list is slightly long but informative rather than 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 compensates by naming the returned fields, scoping behavior, the alternative tool, and the plan gate. For a zero-required-param list tool this is complete enough to call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

At 50% schema coverage the description carries weight and does: it explains projectId scoping (null = org-wide, omit = org-wide + every project) and the entity/entityId pairing, which the schema only partially documents. limit, cursor, and isActive remain unexplained, so it stops short of full coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('List workflows in the org') and enumerates the returned fields, so an agent knows exactly what it gets back. It explicitly distinguishes itself from get_workflow, which lacks the ambiguity typical in a 100+ tool inventory.

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 routing rules: pass projectId to scope to one project, omit for org-wide, pass entity+entityId for entity-scoped workflows, and 'PREFER get_workflow for the full graph + steps definition.' Both when-to-use and the named alternative are present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_working_calendarsA
Read-onlyIdempotent
Inspect

List working calendars in this org. Returns id, name, workDays (0=Sun..6=Sat array), hoursPerDay, isDefault, exceptionCount per row. PREFER get_working_calendar for the full exception list.

NameRequiredDescriptionDefault
limitNoDefault 50, max 50.
cursorNo

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/non-open-world, so the safety profile is covered. The description goes beyond them by disclosing the per-row return shape (id, name, workDays encoding 0=Sun..6=Sat, hoursPerDay, isDefault, exceptionCount), which matters because no output schema exists. Pagination/iteration behavior 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, zero filler, and the core purpose plus the sibling routing are front-loaded. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the return-field enumeration is exactly what the description should supply, and the sibling pointer covers the main adjacent use case. The remaining gap is pagination guidance for the undocumented cursor.

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%: limit is documented (default 50, max 50) but cursor has no description. The description says nothing about limit, cursor, or how to page through results, so it does not compensate for the gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource+scope ('List working calendars in this org') and it explicitly names the sibling get_working_calendar as the tool for a different need. An agent can distinguish the two 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?

'PREFER get_working_calendar for the full exception list' gives an explicit alternative plus the condition that selects it. It stops short of stating the reverse case (use this list for org-wide overviews) or any prerequisites, so it is clear context rather than complete routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_workspace_rowsA
Read-onlyIdempotent
Inspect

List rows in a workspace table (with cells), in list order. Cursor pagination: cursor takes the nextCursor of the previous page, which is null on the last page. PREFER get_workspace_table for small tables where the full shape is more useful.

NameRequiredDescriptionDefault
limitNoDefault 100, max 500.
cursorNo
tableIdYes

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 description wisely spends its words elsewhere: it discloses pagination mechanics (cursor takes the previous page's nextCursor, which is null on the last page) and that rows come back in list order with cells. It doesn't mention any rate limits or approximate result size, keeping it 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?

Three short sentences: what it returns, how pagination works, and when to prefer the sibling. Front-loaded and every sentence adds 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?

For a 3-parameter list tool with no output schema, the description covers the essentials: content (rows with cells), ordering, and pagination termination. The main remaining gap is return shape detail, which is partially implied but not stated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33%, so the description has to carry the load and it does for cursor, explaining exactly what value to pass and how end-of-list is signalled. limit already has a schema default/max, and tableId is self-evident from the tool name, so the coverage gap is largely mitigated.

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 rows in a workspace table"), adds useful scope detail ("with cells, in list order"), and explicitly contrasts itself with the sibling get_workspace_table so an agent can choose 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?

Names the alternative (get_workspace_table) and the condition that favors it (small tables where the full shape matters), which is a genuine routing hint. It stops short of a full when/when-not matrix (e.g., no guidance on very large tables or on bulk_create_workspace_rows as the counterpart), so not a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_workspace_tablesA
Read-onlyIdempotent
Inspect

List workspace tables (custom structured-data tables) in a project or proposal scope. Returns id, name, description, columnCount, rowCount. PREFER get_workspace_table for column + row detail.

NameRequiredDescriptionDefault
limitNoDefault 50, max 100.
cursorNo
projectIdNo
proposalIdNo

TDQS

A4/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 the safety profile is covered by structured data. The description adds useful context by enumerating the returned fields (id, name, description, columnCount, rowCount), but says nothing about pagination behavior despite the cursor parameter.

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: purpose and scope first, return shape second, sibling routing last. 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, the description correctly compensates by listing return fields, and it names the scope. It does not resolve whether projectId or proposalId is required (schema marks none required), leaving a small ambiguity for a 4-parameter list 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 only 25% (only limit is documented in the schema). The phrase "in a project or proposal scope" gives semantic intent to projectId/proposalId, which partially compensates, but cursor and limit semantics are not clarified in the description beyond the schema's own note.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (List) plus resource (workspace tables) with a parenthetical defining what a workspace table is, and a scope qualifier (project or proposal). It also differentiates from the sibling get_workspace_table by stating that the latter is for column + row detail.

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?

"PREFER get_workspace_table for column + row detail" gives an explicit alternative and the condition that selects it, which is strong routing guidance. It does not address when to use list_workspace_rows instead, but that is a different resource and the intent here is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lookup_governance_alertsA
Read-onlyIdempotent
Inspect

Fetch active governance alerts for the caller's org: stuck proposals,untouched risks, compliance dips, critical-unassigned tasks, stuck approvals. Use this when the user opens chat from the dashboard "Governance alerts" widget (the Ask-AI handoff) or asks broad questions like "what needs my attention." Visible to OWNER/ADMIN/MANAGER on PRO+ plans. The result is auto-filtered to signals the caller can actually act on.

NameRequiredDescriptionDefault
minSeverityNoOptional severity floor.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive and closed-world, so the safety profile is covered; the description adds genuinely new context by stating the OWNER/ADMIN/MANAGER + PRO+ visibility gate and that results are auto-filtered to items the caller can act on. It does not mention result ordering, counts, or any cap on the alert list.

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 trigger, then access constraints, then filtering behavior - a sensible precedence order. The signal-category list is dense but earns its space by telling the agent what the payload contains; only the missing space after a comma marks it as slightly unpolished.

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 alert categories so the agent can anticipate the response, and the permission/filtering notes prevent wrong-surface calls. It stops short of describing volume, ordering, or what an 'empty alert set' means, which an agent might want for summarization.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single optional minSeverity parameter is already documented with an enum in the schema, so the description carries no additional parameter burden. Baseline 3 applies since the description adds nothing about severity semantics or default behavior.

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 (fetch) plus resource (active governance alerts for the caller's org), and it enumerates the five alert categories so the agent knows exactly what content comes back. It is clearly distinguishable from narrow siblings like list_org_risks or list_compliance_exceptions, which return one signal type rather than the aggregated cross-signal feed.

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 invocation triggers: the dashboard 'Governance alerts' widget handoff and broad 'what needs my attention' questions. It implies the tool is for aggregate triage rather than deep-diving a specific risk list, but never explicitly names the sibling to use instead when the user asks about a single domain.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lookup_help_topicA
Read-onlyIdempotent
Inspect

Searches Onplana's product help catalog and returns NAVIGATION PATHS: where a page, tab or project view lives, so paths do not have to be guessed. It answers "where is X" and "what does role Z do" for a specific page, tab or feature. It returns no article text, so it cannot say how a feature is used or which of its settings exist; search_docs returns the step-by-step article body that covers those. Takes a short keyword phrase as query (e.g. "rate cards", "goals", "permissions matrix"); empty returns every page available to the caller. Results are auto-filtered to the caller's org role, so they never include pages the user cannot reach. Each page comes with reach, the clicks that open it starting from the sidebar (for Import: the sidebar item, and the menu on the New Project button of the Projects page); routes are not returned, because a person clicks rather than types an address. SCOPE: this catalog covers navigation (pages and project views), the buttons, tabs and menus on the Projects, Issues, Goals and Workflows pages, and the project overflow menu, which is where export lives. It is still not the full set of available actions, so an empty result means nothing in the catalog matched, which is not evidence that the capability is missing; describe_capabilities is the authoritative list of what is actually callable, including categories not yet loaded. Export-shaped queries also return an exportNote stating plainly which outbound formats exist and which do not.

NameRequiredDescriptionDefault
queryNoOptional keyword(s) to filter by. Substring-matched against page labels, descriptions, sections, paths, and project-tab names. Omit to list every page available to this caller.

TDQS

A4.8/5.0
Behavior5/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), yet the description adds substantial context beyond them: results are auto-filtered to the caller's org role, routes are deliberately omitted because users click rather than type, export-shaped queries return an `exportNote`, and every page carries a `reach` click path. This is exactly the kind of behavioral detail annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and the sibling distinction are front-loaded, and every section carries information, but the text is dense with parentheticals (the Import path explanation in particular) that slow scanning. Slightly tighter phrasing would preserve the content with less reading load.

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 fully: it names the returned structure (navigation paths plus `reach` clicks) and the `exportNote` on export-shaped queries, and clarifies scope coverage and the meaning of empty results. 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.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the single optional `query` parameter is already documented as substring-matched against labels, descriptions, sections, paths and tab names. The description adds value with concrete example values ("rate cards", "goals", "permissions matrix") and the empty-returns-every-page semantics, which goes slightly 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 ("Searches Onplana's product help catalog and returns NAVIGATION PATHS") and immediately scopes what it covers, down to the field it returns (`reach`). It explicitly distinguishes itself from `search_docs` (article body) and `describe_capabilities` (authoritative capability list), so an agent can route 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?

Explicit when-to-use ("where is X", "what does role Z do") and when-not ("cannot say how a feature is used or which of its settings exist"), each paired with the named alternative. It also spells out the empty-result condition and warns that an empty result is not evidence a capability is missing, pointing at `describe_capabilities` instead. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mark_all_notifications_readA
DestructiveIdempotent
Inspect

Mark every unread notification for the calling user as read. Call after a long agent session to clear the inbox before ending.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, readOnlyHint=false and idempotentHint=true, so the safety profile is covered structurally. The description adds the bulk scope (all unread, not one) and timing intent, but says nothing about reversibility or what the call returns.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler, with the scope stated first and the recommended timing second. 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?

For a no-param, no-output-schema tool whose annotations already cover safety, the description supplies purpose, scope and timing. The only gap is that it does not mention irreversibility, which matters given destructiveHint=true.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters (empty schema, no required fields), so there is no parameter semantics for the description to carry. Baseline 4 applies; nothing is missing or misleading 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?

States a specific verb ('Mark ... as read'), resource ('every unread notification') and scope ('for the calling user'), so the bulk nature is unambiguous. However, it never names the close siblings mark_notification_read or dismiss_all_read_notifications, so the agent must infer the distinction from the quantity word alone.

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 after a long agent session to clear the inbox before ending" gives a concrete triggering context. It stops short of exclusions or explicit alternatives (single-notification marking, dismissing instead of reading), so it is clear context without routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mark_notification_readA
DestructiveIdempotent
Inspect

Flip a single notification's read flag to true. Idempotent: marking an already-read notification returns alreadyRead=true without re-writing. Caller can only act on their own notifications; 404 on a miss (avoids leaking other users' ids). PREFER mark_all_notifications_read for bulk, dismiss_notification to remove entirely.

NameRequiredDescriptionDefault
notificationIdYesId of the Notification row.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations (which only supply idempotentHint/destructiveHint flags) by explaining what idempotency means concretely (returns alreadyRead=true without re-writing), the authorization scope (caller can only act on their own notifications), and the 404-on-miss behavior chosen to avoid leaking other users' ids.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the core action, then idempotency, then auth/404 semantics, then routing guidance. No sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-param mutation with no output schema, the description covers the return signal (alreadyRead=true), the failure mode (404), auth boundary, and alternatives — everything needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Single parameter with 100% schema description coverage, so the schema already documents notificationId fully. The description adds no format, id-shape, or lookup guidance beyond it; 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 ('Flip a single notification's read flag to true') and explicitly scopes to one notification, distinguishing it from the bulk and dismiss siblings named in the same sentence. An agent can select it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names two alternatives directionally: 'PREFER `mark_all_notifications_read` for bulk, `dismiss_notification` to remove entirely.' The condition that selects each alternative is stated, so routing is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

move_projectA
DestructiveIdempotent
Inspect

Move a whole project to a new start date, the way Microsoft Project's Move Project does. Every task without actual work moves by the difference between the old and the new project start, counted in working days on the project's working calendar, so durations, links and lags stay as they are and no date lands on a non-working day. Tasks with an actual start, any progress, or status Done stay where they are, as do tasks whose dates come from Microsoft Planner; tasks linked after them are rescheduled from their links. Dated constraints move with their task. Deadlines move only with moveDeadlines: true. The project start becomes start, and the project end moves by the same working days. dryRun: true returns the same counts (moving, staying and why, deadlinesMoving, constraintsMoving) and writes nothing. Requires the project-level project.edit permission. A start equal to the current one returns changed: false and writes nothing. The result carries undo, the move that puts the plan back.

NameRequiredDescriptionDefault
startYesThe new project start, YYYY-MM-DD.
projectIdYesThe project to move. Use list_projects to find project ids.
moveDeadlinesNoMove task deadlines by the same working days too. Default false.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true, readOnlyHint=false, and the description adds substantial context beyond them: exactly what gets mutated versus preserved, that constraints travel with their task, that deadlines require moveDeadlines: true, that the project end shifts by the same working days, the required project.edit permission, and that the response carries an undo move.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first sentence and each subsequent sentence carries a distinct scheduling rule rather than filler. It is dense and long for a tool description, but almost all content is load-bearing exception logic an agent would otherwise guess wrong.

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 and no annotations covering scheduling semantics, the description compensates fully: it tells the agent what moves, what stays and why, what the return counts and undo field contain, and the permission needed. The only blemish is the phantom dryRun parameter, which is captured under parameter semantics.

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 earns above that by defining semantic behavior for start (equal value returns changed: false and writes nothing) and moveDeadlines (deadlines move only when true). However, it describes a dryRun parameter that does not exist in the input schema, which has additionalProperties: false — an agent may attempt to pass dryRun and be rejected.

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 ('Move a whole project to a new start date') and anchors it to a known reference behavior ('the way Microsoft Project's Move Project does'). An agent can distinguish this from update_project or duplicate_project without opening another schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives rich when-to-use context: it enumerates which tasks move (no actual work) and which stay (actual start, progress, Done status, Planner-sourced dates), plus the dryRun preview path and the no-op case when start equals the current start. It never names a sibling alternative such as update_project for a single-field change, so it falls just short of 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

move_task_to_epicA
DestructiveIdempotent
Inspect

Move one task into an epic (epicId=null detaches it from any epic). Epic must belong to the same project as the task. Caller must be able to edit the task (task.edit.any, or task.edit.own on their own task).

NameRequiredDescriptionDefault
epicIdYesTarget epic id, or null to detach.
taskIdYesTask to move.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds value beyond them by disclosing the authorization model (task.edit.any / task.edit.own) and the cross-project constraint, which are not encoded in the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with zero filler; the core operation and the null-detach case are front-loaded, and the parenthetical is the shortest way to convey detach semantics.

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 this is a boolean-style mutation where the return is not the agent's concern. The description covers the operation, the detach case, project scoping, and permissions, leaving only minor gaps such as what happens to the previous epic's ordering.

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 already document their meaning, including the null-detach behavior for epicId. The description restates the detach semantics and adds the same-project constraint, but adds little beyond the structured fields, 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 ('Move one task into an epic') plus the inverse operation, which cleanly distinguishes it from siblings like move_task_to_sprint or update_task. 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 preconditions: the epic must belong to the task's project and the caller must hold task.edit.any (or task.edit.own on their own task). It does not explicitly name the alternative tool for sprint assignment, but the constraints are stated clearly enough to decide applicability.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

move_task_to_sprintA
DestructiveIdempotent
Inspect

Move one task into a sprint (sprintId=null returns it to the backlog). Sprint must belong to the same project as the task. Caller must be able to edit the task (task.edit.any, or task.edit.own on their own task).

NameRequiredDescriptionDefault
taskIdYesTask to move.
sprintIdYesTarget sprint id, or null for backlog.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds genuinely new behavioral context: the null-sprintId backlog behavior, the cross-project validation constraint, and the exact permission scopes required. It stops short of describing side effects on the task's prior sprint membership or the 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 tight sentences: purpose, edge-case semantics, then constraints and permissions. The most decision-relevant information (what moves, and the null special case) is front-loaded 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 two-parameter mutation tool with no output schema, the description covers purpose, the null edge case, validation constraints, and authorization. It omits what the return value contains and whether the task is removed from a previous sprint, which are minor gaps given the rest of the coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description slightly restates the null=backlog meaning already in the schema. It earns the extra point by adding a cross-parameter constraint (sprint and task must share a project) that the schema cannot 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 ('Move one task into a sprint') and immediately disambiguates the special case that sprintId=null returns it to the backlog. Combined with the existence of sibling tools like move_task_to_epic and update_task, an agent can tell exactly what this does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit prerequisites: the sprint must belong to the same project as the task, and the caller needs task.edit.any or task.edit.own on their own task. It does not name alternative tools (e.g., move_task_to_epic, update_task) or say when not to use it, but the eligibility conditions are unusually concrete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

next_taskAInspect

Pick the next task assigned to you that is ready to start and that no other agent is working on, and lease it, in one call. Use this instead of listing tasks and then claiming one: between the list and the claim a second agent can take it, and this avoids that race. Passes over DONE and BLOCKED tasks; tasks with a finish-to-start predecessor that is not DONE yet (any open predecessor counts, and lag is not considered; start-to-start, finish-to-finish and start-to-finish links do not hold a task back); tasks another agent holds a lease on; and tasks you lack permission to lease (the same rule as claim_task: task.edit.any on the project, or task.edit.own on a task you are assigned or created). Containers (tasks with subtasks other than milestones) and milestones are never offered: a container's subtasks are offered on their own, and a milestone is a date, not work. Order: earliest due date first (no due date last), then highest priority, then oldest. With includeUnassigned=true, unassigned tasks in projects you are a member of are offered too, under the same rules, and only after every one of your assigned tasks. Returns claimed=false when nothing passes. Optional projectId narrows to one project. Renew within 3 minutes and call release_task when finished.

NameRequiredDescriptionDefault
limitNoHow many candidates to try before giving up, in each queue (your assigned tasks, then unassigned ones when includeUnassigned is true). Default 10, max 25.
projectIdNoOnly consider tasks in this project.
includeUnassignedNoDefault false. When true, unassigned tasks in projects you are a member of are offered after all of your assigned tasks. Leasing one does not assign it to you.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=false). The description goes far beyond that, disclosing which tasks are skipped (DONE, BLOCKED, dependency-blocked, leased, permission-denied), the permission rule (task.edit.any / task.edit.own), the ordering algorithm, container/milestone exclusion, the 3-minute lease renewal window, and the required release_task follow-up.

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 race-avoidance rationale, and every clause carries operational information. It is dense and reads as a single long paragraph, but little of it is filler; light structural breaks would help but 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 no-output-schema, zero-required-param tool this is close to complete: eligibility rules, ordering, lease lifecycle and the claimed=false failure case are all covered. It stops short of describing the full success payload shape, but the key return signal is given.

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 nonetheless adds real semantics beyond the schema: projectId 'narrows to one project', and includeUnassigned behavior is elaborated ('offered too, under the same rules, and only after every one of your assigned tasks'), including that leasing an unassigned task does not assign it to you.

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+scope: 'Pick the next task assigned to you that is ready to start and that no other agent is working on, and lease it, in one call.' An agent can distinguish it from claim_task, list_tasks and list_assigned_tasks without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the alternative pattern ('instead of listing tasks and then claiming one') and gives the reason it is preferred (avoiding the race where a second agent takes the task between list and claim). This is exactly the when/when-not/alternative guidance the dimension asks for.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

parse_pasted_scheduleA
Read-onlyIdempotent
Inspect

Parse a free-text or pasted schedule into a structured task list. Each task line/paragraph is extracted into {title, description?, assigneeId?, dueDate?, priority?}. When projectId is provided, member names in the text are matched against actual project members for assigneeId resolution. Returns an array of parsed tasks, does NOT create them. Pass the result to instantiate_plan or create_task to materialise. Feature: aiCore (every plan). Use when the user pastes a schedule from email, a spreadsheet, or a document and asks "turn this into tasks".

NameRequiredDescriptionDefault
textYesThe natural-language or pasted schedule text. Can be a numbered list, bulleted list, paragraph prose, or a table. Each distinct task should be on its own line or clearly delimited.
projectIdNoOptional. Project ID for member-name resolution. When provided, assignee names in the text are matched against project members.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly/idempotent/non-destructive, and the description reinforces this with 'does NOT create them' and describes the return shape and the conditional member-matching behavior when projectId is supplied. It stops short of stating limits (text length caps, failure modes for unmatched assignee names), 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then output shape, then the critical non-mutating guarantee and the hand-off guidance. The 'Feature: aiCore (every plan)' clause is enterprise metadata that costs a sentence without helping the agent select or invoke the tool, a minor deduction.

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 describing the returned array element shape, the non-mutating contract, and the conditional resolution behavior. An agent has everything needed to call it and act on 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% for the two parameters, so the schema already documents text and projectId. The description restates the projectId member-resolution behavior rather than adding new syntax, format, or constraint detail; the extracted field shape it lists is return-value information, not 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 ('Parse a free-text or pasted schedule into a structured task list') and immediately disambiguates it from the write-side siblings by declaring it does NOT create tasks. An agent can tell it apart from create_task, bulk_create_tasks, and instantiate_plan without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger scenario ('when the user pastes a schedule from email, a spreadsheet, or a document and asks "turn this into tasks"') and names the downstream alternatives ('Pass the result to instantiate_plan or create_task to materialise'), which is exactly the routing decision an agent needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

portfolio_summaryA
Read-onlyIdempotent
Inspect

Aggregate metrics for one portfolio: project count, task totals, status breakdown, RAG distribution, currency-normalized budget rollup. The budget rollup counts only projects whose cost the caller may read (budget.read); budgetHiddenCount is how many visible projects it leaves out. plans gives each visible plan its RAG (a Planner plan is judged on its tasks' progress and dates, GREY when it has none) and url. attention lists the open issues and risks across the plans, the cross-plan dependencies whose predecessor is late, and each plan's next late milestone, each row with its url. Requires BUSINESS+ portfolios feature + org.portfolio.manage permission (MANAGER+ default). For per-project detail use get_portfolio.

NameRequiredDescriptionDefault
portfolioIdYes

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 safety profile is covered. The description goes well beyond that: budget.read gating that excludes unreadable projects from the rollup, the budgetHiddenCount field explaining the omission, the GREY RAG rule for plans with no tasks, and the contents of the attention block. That is substantial behavioral 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?

Front-loaded with what is aggregated, then the permission caveats and the sibling routing, all in dense sentences with no filler. It is somewhat long, but each sentence (budget gating, RAG rules, attention contents, permissions, alternative) earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description effectively documents the return shape (metrics, budgetHiddenCount, plans with RAG/url, attention rows with url) plus the permission envelope. An agent has everything needed to call it and interpret the response.

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 0% and the description gives no syntax or format for portfolioId, only implying the single-portfolio scope. With one self-evident identifier parameter, this is the expected baseline but the description adds nothing new for 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 (aggregate metrics for one portfolio) and enumerates the exact content: project count, task totals, status breakdown, RAG distribution, currency-normalized budget rollup. It is clearly distinguishable from the sibling get_portfolio, which it names for per-project detail.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: 'For per-project detail use get_portfolio.' It also states the prerequisites for invoking it (BUSINESS+ portfolios feature, org.portfolio.manage, MANAGER+ default, budget.read for the rollup), so the agent knows both when to call it and whether it can.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

post_teams_channel_messageA
DestructiveIdempotent
Inspect

Post a message to a Microsoft Teams channel as the authorized user. No draft mode (Teams channel posts are inherently immediate); requires confirm=true. The post appears under the connected user's identity, not the agent's.

NameRequiredDescriptionDefault
bodyYes
teamIdYesGraph Group/Team id (the parent of the channel).
confirmYesMust be true to send. There is no draft for Teams.
subjectNo
channelIdYesChannel id within the team.
bodyContentTypeNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=true, so the write/mutation nature is covered. The description adds genuinely non-redundant context: no draft mode, the confirm gate, and that the post appears under the connected user's identity rather than the agent's — that identity disclosure is behaviorally important and not 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 compact sentences, front-loaded with the core action, then the confirm constraint, then the identity caveat. Every clause carries information and nothing is repeated from the schema verbatim.

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 write tool with annotations and no output schema, the description covers the critical invocation constraint (confirm), the identity semantics, and the no-draft behavior. It leaves out error/rate-limit behavior and the meaning of bodyContentType, but the essentials an agent needs to call it correctly are present.

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 50% (teamId, channelId, confirm documented; body, subject, bodyContentType have none). The description adds no meaning for the undocumented parameters — it never explains body formatting, the text/html choice, or subject — so it fails to compensate 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 ('Post a message to a Microsoft Teams channel') and names the acting identity, which cleanly separates it from siblings like send_outlook_message, create_comment, or create_teams_message. An agent can identify the operation and the target surface without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It communicates that there is no draft path and that confirm=true is mandatory, which implies this is the right tool only when an immediate, confirmed send is intended. However, it never names alternatives (e.g. send_outlook_message for email) or states explicit when-not-to-use conditions, so the routing guidance is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

preview_migrationA
Read-onlyIdempotent
Inspect

Preview migrating an existing Onplana project OUT to every target (Onplana, MS Project XML, CSV, Excel, Microsoft Planner / Project for the web / To Do / Lists, Azure DevOps, Asana, monday.com, ClickUp, Notion, Airtable, Jira). Returns a 0-100 fidelity score per target plus the features that carry cleanly vs with loss. Read-only.

NameRequiredDescriptionDefault
projectIdYesThe Onplana project to preview migrating.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and closed-world, so the safety profile is covered; the trailing 'Read-only.' is largely redundant. What the description does add beyond structured data is the shape of the response: a 0-100 fidelity score per target plus which features carry cleanly vs with loss, which is genuinely useful behavioral context given there is no output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action and scope in the first clause, then the return contract, then a one-word safety tag. The long target enumeration is load-bearing information rather than filler, and no sentence 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 read-only, single-parameter tool with strong annotations and no output schema, the description covers the essential return semantics (per-target fidelity score, clean vs lossy features). It stops short of saying how to interpret or act on the score, but nothing required to invoke 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?

Only one parameter, and the schema carries a 100% coverage description ('The Onplana project to preview migrating'). The description adds no syntax, format, or constraint detail for projectId, so the baseline of 3 for high schema coverage 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 (preview migrating) and resource (an Onplana project) with explicit scope: OUT to every named target, returning a fidelity score. The enumerated target list makes it unmistakable versus siblings like import_sharepoint_list_projects or duplicate_project.

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 'Preview' and 'Read-only' imply this is a pre-migration assessment step, but the description never states when to call it versus alternatives (e.g., actual export/import tools, duplicate_project, or a real migration operation). Usage must be inferred from the name and the fidelity-score framing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

promote_ideaA
DestructiveIdempotent
Inspect

Turn an idea into real work. target="task" is the fast lane (small, clear, do it now) and needs a projectId when the idea is still General. target="proposal" is the governance lane for material investment: it opens a DRAFT proposal that goes through the stage gates, and requires the Enterprise governance feature. Either way the idea flips to PROMOTED and links to what it became. Choose the lane deliberately: most ideas are tasks.

NameRequiredDescriptionDefault
ideaIdYes
targetYes
projectIdNoRequired for target=task when the idea has no project.
assigneeIdNoTask lane only. Defaults to the caller.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations establish the safety profile (mutation, idempotent, destructive), and the description adds real context beyond them: the Enterprise governance feature prerequisite, the DRAFT state the proposal opens in, and the terminal state change ('idea flips to PROMOTED and links to what it became'). It doesn't explain error/failure behavior or what happens to linked artifacts, but the added side-effect and prerequisite detail is substantial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the one-line purpose, then two parallel sentences for the two lanes, closing with a decision heuristic. No filler and every clause carries operational meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-param mutation with no output schema, the description covers purpose, lane selection, prerequisites, and resulting state. It leaves minor gaps (permissions beyond the Enterprise gate, behavior on failure), but nothing essential to invoking it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50%, but the description compensates well: it explains the 'target' enum semantics (two lanes) and the conditional 'projectId' requirement ('when the idea is still General'). 'assigneeId' is only documented in the schema and 'ideaId' is not elaborated, but the added meaning for the two most consequential params is significant.

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 ('promote') and resource ('an idea') plus the two concrete outcomes (task or DRAFT proposal). It is immediately distinguishable from siblings like create_task, create_proposal, and update_idea because it transforms an existing idea rather than creating a fresh 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?

It clearly frames when each lane applies ('task' for small/clear/do-it-now, 'proposal' for material investment) and even advises 'most ideas are tasks.' It stops short of naming alternative tools (e.g. create_task directly or update_idea) or stating when not to use this tool at all, so it is strong 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.

propose_assignmentAInspect

Propose assigning a task to a teammate for human review. Writes a PENDING suggestion; on accept the task is assigned. The target must be an active member of the organization. Use when you can identify the right owner but want human confirmation before assigning. On plans with resource management the result carries load: the proposed assignee's capacity for the week the task lands in, their other committed work, this task's share, whether that exceeds capacity, and the competing work that week. The same row travels in the suggestion for the reviewer.

NameRequiredDescriptionDefault
reasonYesWhy this person. Shown to the reviewer. 1-2000 chars.
taskIdYesThe task to assign. Must be visible to the caller.
assigneeIdYesUser id of the proposed assignee (an active org member).

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavior beyond the annotations (which only give the generic write/non-destructive profile): the write is a PENDING suggestion, applies only on accept, requires an active org member, and the result carries a `load` breakdown. The last point 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads purpose, mechanism, and the usage condition before the extended `load` paragraph. The `load` detail is justified given the absent output schema, but it is verbose and could be tightened without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description compensates by enumerating what the `load` result contains and noting it also travels in the suggestion. Purpose, prerequisite, usage condition, and return content are all covered for a 3-parameter mutation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters, setting the baseline at 3. The description reinforces that the target must be an active org member and that `reason` is shown to the reviewer, but adds no format/syntax detail the schema lacks.

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 ('Propose assigning a task to a teammate') and immediately clarifies the mechanism: writes a PENDING suggestion that only assigns on accept. This cleanly distinguishes it from the sibling assign_task, which performs the assignment directly.

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?

Explicit when-to-use guidance: 'Use when you can identify the right owner but want human confirmation before assigning.' That condition implicitly routes the agent away from direct assignment, but it never names the alternative sibling (assign_task) explicitly, so the routing is inferred 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.

propose_deadline_extensionAInspect

Propose changing a task due date (typically extending it) for human review. Writes a PENDING suggestion; on accept the due date is applied. Use when a task is blocked or slipping and you want human sign-off on a new date rather than silently moving it. Date is YYYY-MM-DD.

NameRequiredDescriptionDefault
reasonYesWhy the date should move. Shown to the reviewer. 1-2000 chars.
taskIdYesThe task whose due date to change. Must be visible to the caller.
newDueDateYesProposed new due date, YYYY-MM-DD.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false); the description goes further by disclosing the two-phase lifecycle — a PENDING suggestion is written and the due date is only applied on human accept. That is genuinely useful behavioral context. It doesn't say what happens on rejection or whether the reviewer is notified.

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 the tool does, then behavior, then when to use it. Every sentence carries distinct information and the trailing date-format note is the only mildly redundant element.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still conveys the key outcome (pending suggestion, applied on accept), and annotations cover the safety hints; parameters are fully documented in the schema. What's absent are the post-rejection path, reviewer notification behavior, and whether the proposal can be withdrawn — minor gaps for an approval-workflow 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 three parameters (taskId, newDueDate, reason) are already documented in the schema, including the YYYY-MM-DD format the description repeats. The one added nuance is that the change is 'typically' an extension, implying newDueDate may move either direction — modest value over an already complete schema, so 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?

The description gives a specific verb and resource ('Propose changing a task due date ... for human review') and clarifies the scope is a PENDING suggestion rather than a direct edit. It does not explicitly name the close siblings (propose_status_change, propose_task_split, propose_assignment), but the resource noun makes the tool distinguishable 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 states the triggering condition clearly ('when a task is blocked or slipping') and contrasts with the alternative of silently moving the date, which implicitly routes the agent to update_task. It stops short of naming that alternative tool or stating exclusions (e.g. don't use if you have authority to move the date directly).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

propose_dependencyAInspect

Propose linking two tasks with a dependency (FINISH_TO_START etc.) for human review. Writes a PENDING suggestion; on accept the dependency is created (with a circular-chain guard). Use when you see a sequencing constraint between tasks but want human confirmation before wiring it.

NameRequiredDescriptionDefault
lagNoInteger days. Default 0; negative for lead time.
typeNoDependency type. Default FINISH_TO_START.
reasonYesWhy this dependency. Shown to the reviewer. 1-2000 chars.
successorIdYesTask that depends on the predecessor.
predecessorIdYesTask that must complete (or start) first.

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only tell the agent this is a non-read-only, non-destructive, non-idempotent write; the description goes much further by disclosing the deferred state model (a PENDING suggestion that only creates the dependency on accept) and the circular-chain validation guard. That is exactly the context an agent needs to know a call here does not immediately modify the schedule.

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-loaded with what the tool does before the usage cue and the accept-time behavior. The parenthetical type list is mildly redundant with the enum but costs almost nothing.

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 safety and a fully documented schema, the description supplies the missing pieces: pending-state semantics, the human-approval workflow, and the circular-guard validation. Only the shape of the proposal result (e.g., an identifier to track the suggestion) is left unspecified, which is a minor gap 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 description coverage is 100%, so predecessor/successor, type enum, lag semantics, and reason length are already fully documented. The description only echoes the dependency type example ('FINISH_TO_START etc.') and adds no semantics beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('propose linking two tasks with a dependency') and captures the review-gated nature of the operation. It separates itself from direct creation implicitly via 'for human review' and 'writes a PENDING suggestion', but never names the sibling link_dependency that does the immediate write, so the contrast must be inferred.

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 when you see a sequencing constraint between tasks but want human confirmation before wiring it' gives an explicit trigger and the condition that selects this tool over a direct link. It stops short of naming the alternative (link_dependency) or stating when not to use it, so it is strong but not complete routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

propose_milestone_completionAInspect

Propose marking a milestone complete for human review (e.g. all its tasks are done). Writes a PENDING suggestion; on accept the milestone is flipped to completed. Use when a milestone looks reached but you want a human to confirm the sign-off.

NameRequiredDescriptionDefault
reasonYesWhy the milestone is reached. Shown to the reviewer. 1-2000 chars.
milestoneIdYesThe milestone to mark complete. Must be visible to the caller.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations establish the operation is a non-read, non-destructive, non-idempotent mutation, and the description adds genuine context beyond that: a PENDING suggestion is written and only on acceptance is the milestone flipped to completed. It does not cover the reject path, permission requirements, or resubmission behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action and its approval-gated nature, then the state transition, then the usage cue. No filler or repetition of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter, no-output-schema mutation with annotations already covering safety, the description supplies the essential two-phase behavior an agent needs. Remaining gaps (reject/withdraw behavior, permissions) are minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters are fully documented in the schema, including 'shown to the reviewer' and 'must be visible to the caller'. The description adds no syntax or format detail beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (propose) and resource (milestone completion) plus the governing constraint 'for human review', which cleanly separates it from a direct mutation like update_milestone. An agent can tell what it does and that it is an approval-gated proposal without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The final sentence gives an explicit trigger condition ('when a milestone looks reached but you want a human to confirm the sign-off'), which is clear usage context. It stops short of naming alternative siblings or stating when not to use it (e.g. when auto-approval or direct update_milestone is preferred).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

propose_status_changeAInspect

Propose changing a task to a new status (TODO / IN_PROGRESS / REVIEW / DONE / BLOCKED). Writes a PENDING suggestion a human reviews + accepts in the Suggestions inbox; on accept the status is applied. Use when you observe a task should move (e.g. work referenced it this week) but want human confirmation rather than flipping it yourself.

NameRequiredDescriptionDefault
reasonYesWhy the status should change. Shown to the reviewer. 1-2000 chars.
statusYesProposed new status.
taskIdYesThe task to move. Must be visible to the caller.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the safety profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false). The description adds substantial context beyond them: it writes a PENDING suggestion, a human reviews and accepts it in the Suggestions inbox, and only on accept is the status actually applied. This two-phase, deferred-application behavior is exactly what an agent needs and cannot be inferred from the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action, then the deferred-review mechanism, then the usage condition. Three sentences, each carrying distinct 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 must explain the outcome, and it does: a PENDING suggestion is created and the status is applied only upon human acceptance. Combined with the fully covered schema, an agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

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 taskId, status (with enum), and reason. The description restates the status enum values already present in the schema and adds no syntax or constraint detail beyond it, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (propose a task status change), enumerates the valid target statuses, and names the mechanism (a PENDING suggestion). It also implicitly distinguishes itself from direct mutation siblings like update_task/bulk_update_status via 'rather than flipping it yourself', 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 Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use when you observe a task should move (e.g. work referenced it this week) but want human confirmation rather than flipping it yourself' gives both a positive trigger and a when-not condition with an alternative behavior. It falls just short of 5 because the alternative tool (update_task) is described behaviorally rather than named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

propose_task_splitAInspect

Propose splitting an existing task into 2–10 smaller children. Writes a PENDING AISuggestion row that a human reviews + accepts in the normal Suggestions inbox. The agent should poll the suggestion id until status flips to ACCEPTED, then call add_subtasks to materialize the split. Use this when the brief reveals a task is too coarse to execute as one unit and you want explicit human approval before fragmenting the plan.

NameRequiredDescriptionDefault
taskIdYesThe task you want to split. Must be visible to the caller.
childrenYes2–10 proposed child tasks. Each gets title + optional description / priority / estimatedHours.
rationaleYesWhy the agent thinks the parent should be split. Shown to the human reviewer. 1–2000 chars.

TDQS

A4.7/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 exact side effect (a PENDING AISuggestion row), where a human reviews it (Suggestions inbox), and the required agent behavior (poll the suggestion id until status flips to ACCEPTED). This is rich workflow context the annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tightly packed sentences with the core action front-loaded, then side effect, then required follow-up, then the triggering condition. Every sentence carries distinct information and none is 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?

For a mutation tool with no output schema, the description supplies everything an agent needs: the artifact created, who reviews it, how to detect acceptance, and what to call next. Nothing critical 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 taskId, children, and rationale are already fully documented in the schema. The description restates the 2–10 child constraint and the 'existing/visible' task notion but adds no format or edge-case detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('propose splitting an existing task into 2–10 smaller children') and immediately clarifies the output artifact (a PENDING AISuggestion row). It also distinguishes itself from the sibling add_subtasks, which performs materialization rather than the proposal.

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 to use it ('when the brief reveals a task is too coarse to execute as one unit and you want explicit human approval before fragmenting the plan') and names the follow-up tool (add_subtasks) needed to act on an accepted suggestion. Nothing is left implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

publish_pageA
DestructiveIdempotent
Inspect

Publish a web part page: snapshots a new version and copies the working draft to the published content so viewers see it. Requires contribute access.

NameRequiredDescriptionDefault
pageIdYesPage id.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds real behavioral detail beyond the annotations: it discloses that publishing creates a version snapshot and copies the draft to published content, and that contribute access is required. This is consistent with destructiveHint=true and idempotentHint=true. It stops short of covering failure modes (e.g., unpublish, missing draft).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with no filler; the action and effect are front-loaded and the access requirement 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 single-parameter mutation with no output schema, the description covers what changes, what the side effect is, and the permission needed. Only edge cases such as what happens with no working draft or how to revert are unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter (pageId) with 100% schema description coverage, so the schema already documents the input. The description adds no format, scope, or identification detail beyond what the schema provides, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (publish), a specific resource (web part page), and the mechanism (snapshot a new version, copy the working draft to published content). This clearly separates it from siblings like update_page, create_page, and restore_page_version, which do not publish.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a prerequisite ('Requires contribute access') which is useful context, but says nothing about when to prefer this over update_page, design_page_draft, or restore_page_version. Usage is implied by the verb rather than explicitly scoped.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_agent_briefA
Read-onlyIdempotent
Inspect

Return the focused brief for a single task: title, description, agentBrief, collaborators (people working on it besides the assignee), parent task (if any), immediate dependency neighbours, project context, and any PENDING agent prompts outstanding before the task can start. Narrower than get_task: it carries just-enough context to begin work rather than the full task record, and it pairs with list_assigned_tasks, which supplies the queue this reads from.

NameRequiredDescriptionDefault
taskIdYesThe task you want the brief for.

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 description is free to add the genuinely useful behavior: that the brief includes PENDING agent prompts outstanding before the task can start, and that it deliberately returns a scoped subset rather than the full record. It does not discuss failure modes for a missing/invalid taskId, 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?

Two dense sentences with zero filler; the payload list is front-loaded and the sibling relationships come second. Every clause either defines the return or positions the tool against its alternatives.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description takes on the job of describing the return shape and does so field by field, including the non-obvious pending-agent-prompts element. Combined with the annotations covering safety, an agent has everything needed to select and call 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?

There is one parameter and schema description coverage is 100% ('The task you want the brief for.'), so the schema already carries the semantics. The description only implies a single-task scope, adding no format, ID-shape, or source-of-ID detail. 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 ('Return the focused brief for a single task') and enumerates the exact payload (title, description, agentBrief, collaborators, parent, dependencies, project context, pending prompts). It also explicitly contrasts itself with get_task, so an agent can distinguish it from the closest sibling without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear usage context: this is what to read 'to begin work' rather than the full task record, and it names two alternatives (get_task and list_assigned_tasks, the latter supplying the queue). It stops short of an explicit 'do not use this when...' rule, but the contrast with get_task is sufficient to route the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_document_contentA
Read-onlyIdempotent
Inspect

Read the body of a workspace document by id (markdown/text drafted by the agent or a human). Complements get_document_metadata (metadata) and draft_document (create). Text returns decoded; binaries return a download pointer; >8 MB returns metadata only. Caller must have project visibility.

NameRequiredDescriptionDefault
documentIdYesThe workspace document id.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile, and the description still adds substantial non-obvious behavior: text is returned decoded, binaries yield a download pointer, and documents over 8 MB return metadata only. It also states the authorization precondition ('Caller must have project visibility'), which the annotations do not convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, each carrying distinct information: identity, sibling roles, return-shape branches, and access requirement. The core action is front-loaded and nothing is 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?

There is no output schema, so the description carries the burden of explaining return values, and it does so across all three cases (decoded text, download pointer, oversize metadata-only). Combined with the visibility prerequisite, an agent has everything needed to call and interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage on the single documentId parameter, the schema already does the heavy lifting. The description only restates 'by id' and does not add format, source, or lookup guidance, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (read) and resource (workspace document body) and immediately bounds the content type as markdown/text authored by an agent or human. It explicitly distinguishes itself from get_document_metadata and draft_document, so an agent can route 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 both adjacent siblings with their roles ('get_document_metadata (metadata)', 'draft_document (create)'), which effectively tells the agent when this tool is the right one. It stops short of an explicit when-not clause (e.g., use list_documents first to find an id, or update_document_content to modify), so it 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.

read_issue_attachmentA
Read-onlyIdempotent
Inspect

Read the content of one Issue attachment by id (get the id from list_issue_attachments or get_issue). Text files return decoded text; images return a viewable image, which is what makes a screenshot on a bug report usable; other binaries return base64 when small. Files over 8 MB return metadata only. Caller must be able to read the issue.

NameRequiredDescriptionDefault
issueIdYesThe issue id.
attachmentIdYesThe attachment id (from list_issue_attachments).

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety (readOnly, idempotent, non-destructive), yet the description still adds substantive behavior: text returns decoded text, images return viewable bytes, small binaries return base64, files over 8 MB return metadata only, and read access to the issue is required. This is exactly the kind of return-shape and limit disclosure 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then layers return-format behavior and limits in a compact sequence. Every clause carries information, though the return-format list is dense enough that tighter phrasing would help.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates fully by explaining the differing return shapes (decoded text, viewable image, base64, metadata-only over 8 MB) plus the permission requirement. An agent has everything needed to call and interpret it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters are documented in the schema itself, so the schema does the heavy lifting. The description only reiterates the provenance of attachmentId ('get the id from list_issue_attachments or get_issue'), which is marginal added 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?

States a specific verb ('Read the content'), resource ('one Issue attachment'), and access key ('by id'). It is clearly distinguishable from list_issue_attachments and the parallel read_task_attachment 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?

Explicitly tells the agent where to obtain the id (list_issue_attachments or get_issue) and states the permission precondition ('Caller must be able to read the issue'). It does not, however, distinguish when to use this vs the sibling read_task_attachment, so the exclusion is missing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_task_attachmentA
Read-onlyIdempotent
Inspect

Read the content of one task attachment by id (get the id from list_task_attachments). Text files return decoded text; images return a viewable image; other binaries return base64 when small. Files over 8 MB return metadata only, download them in the app. Caller must have visibility into the parent project.

NameRequiredDescriptionDefault
taskIdYesThe task id.
attachmentIdYesThe attachment id (from list_task_attachments).

TDQS

A4.5/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 adds substantive behavior on top: return payload varies by file type (decoded text, viewable image, base64 for small binaries), an 8 MB cap that downgrades to metadata only, and a required visibility permission on the parent project. That is exactly the extra 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences: identity, retrieval pointer, return-format rules, size limit, and permission requirement. Front-loaded with the core action and no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still explains what comes back for each file category, the size threshold that changes the response, and the access precondition. An agent has everything needed to call it and interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the attachmentId schema text already says 'from list_task_attachments', so the description adds no new meaning about either parameter. Baseline 3 is appropriate when the schema carries the full 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 ('Read the content of one task attachment by id'), clearly distinct from the sibling list_task_attachments and from read_issue_attachment/read_document_content. 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 the prerequisite for obtaining the id ('get the id from list_task_attachments') and a fallback path for large files ('download them in the app'). It does not explicitly contrast against read_issue_attachment or other content readers, so it falls short of a full when/when-not routing statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reject_timesheet_entryA
DestructiveIdempotent
Inspect

Reject a single SUBMITTED timesheet entry (returns it to the submitter for correction). Optionally provide a reason. Feature: timeTracking (PRO+).

NameRequiredDescriptionDefault
reasonNoOptional rejection reason shown to submitter.
entryIdYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered. The description adds real behavioral context beyond that: it discloses the entry's post-state (returned to submitter for correction) and the timeTracking PRO+ feature gate, which the annotations do not.

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 fragments, front-loaded with the action and its state precondition, with no filler. The feature/PRO+ note earns its place as a gating constraint, though it sits slightly awkwardly as a trailing tag.

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-entity mutation whose annotations carry the destructive/idempotent profile and which has no output schema, the description covers action, precondition, effect, optional parameter, and feature gate. It omits what happens on a non-SUBMITTED entry and any permission/approver requirement, which are minor 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 coverage is 50%: 'reason' is documented in the schema, but 'entryId' has no description anywhere. The description adds only that reason is optional and 'shown to submitter' behavior already lives in the schema, so it neither compensates for nor extends the undocumented entryId.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb+resource (reject a timesheet entry) and scopes it with 'single SUBMITTED', which separates it from the sibling reject_timesheet_week and from update_timesheet_entry. An agent can tell what it does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'SUBMITTED' precondition and the parenthetical effect ('returns it to the submitter for correction') imply when the tool applies, but no alternative is named — not approve_timesheet_entry, not reject_timesheet_week, not update_timesheet_entry. Usage is inferable rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reject_timesheet_weekA
DestructiveIdempotent
Inspect

Bulk-reject all SUBMITTED timesheet entries for a specific user in a given week. Optionally provide a rejection reason. Feature: timeTracking (PRO+).

NameRequiredDescriptionDefault
reasonNoOptional rejection reason.
userIdYes
weekStartYesMonday date (YYYY-MM-DD).

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, lowering the bar. The description adds two useful pieces of context beyond that: only SUBMITTED entries are affected (so drafts aren't touched) and the feature requires timeTracking PRO+. It does not address reversibility, audit trail, or what happens to non-submitted entries.

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-load the core action and scope; the optional-reason and feature-gating notes follow compactly. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema and a destructive annotation already set, the description covers scope, state precondition, and feature gating adequately. It lacks only permission/authorization and reversibility details an agent might want.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%: reason and weekStart are documented (weekStart as Monday YYYY-MM-DD), but userId carries no schema description. The description confirms reason is optional and scopes userId to 'a specific user,' adding only marginal meaning. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (bulk-reject), resource (timesheet entries), and scope (all SUBMITTED entries for one user in one week). The word 'Bulk' plus the week-level scope clearly distinguishes it from the single-entry sibling reject_timesheet_entry.

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 SUBMITTED-only constraint implies when this applies (entries must be in a submitted state), but the description never explicitly says when to use this bulk version versus reject_timesheet_entry or the approval counterparts. Usage is inferable but not spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

release_taskA
Idempotent
Inspect

Give back a lease when the work is finished or abandoned, so another agent can pick the task up immediately instead of waiting for the lease to expire. Call it as soon as you stop working, including when you stop because the work failed. released=false simply means this session did not hold the lease; it is not an error worth retrying. This does not change the task status or its assignee.

NameRequiredDescriptionDefault
taskIdYesTask whose lease to give back.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by documenting the returned released=false case and telling the agent it is not an error worth retrying, and by explicitly scoping the side effects to the lease only (no status, no assignee change). This is exactly the operational context that readOnlyHint=false, idempotentHint=true, and destructiveHint=false cannot convey on their own.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each load-bearing: purpose first, then timing, then the failure-mode caveat. Slightly dense but no filler; the released=false sentence is the only one an agent might skim past before reading it matters.

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 explaining the released flag's meaning and pre-empting the retry mistake. For a one-parameter, idempotent lease operation this covers everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter and schema coverage is 100%, with the schema itself stating 'Task whose lease to give back.' The description adds nothing about the taskId format or source, so it sits at the documented baseline rather than adding value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource ('give back a lease') and states the immediate payoff ('another agent can pick the task up immediately'). The closing sentence draws a hard boundary against update_task/assign_task by ruling out status and assignee changes, so the agent can distinguish it from the large mutation toolset 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?

Gives explicit timing ('as soon as you stop working') and extends it to the failure case, which is the non-obvious one. It stops short of naming the complementary siblings (claim_task, renew_task_lease), so the when-not-this-tool routing is only 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.

renew_task_leaseA
Idempotent
Inspect

Extend a lease this session already holds, to keep working past its expiry. Call it roughly every 3 minutes during long work. renewed=false means the lease has already lapsed or another agent now holds the task: stop, and call claim_task again to find out which. Retrying a failed renew never succeeds.

NameRequiredDescriptionDefault
taskIdYesTask whose lease to extend.
ttlMinutesNoNew lifetime in minutes from now. Defaults to 10.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover safety traits (non-destructive, idempotent, not read-only), and the description adds non-obvious behavior beyond them: the renewal cadence, the semantics of a renewed=false result, and the fact that retries never succeed. Because there is no output schema, explaining the renewed=false contract is especially valuable.

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 tightly written sentences, front-loaded with the purpose and cadence, each carrying distinct information (what it does, when to call, failure meaning, retry caveat) with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description steps in to explain the renewed=false return contract, and it covers cadence, failure handling, and the retry caveat. Nothing an agent needs to call and interpret this tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters (taskId, ttlMinutes with a 10-minute default) are already documented in the schema. The description references the cadence implicitly but adds no syntax or format detail beyond what the schema provides, 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 (extend/renew) and resource (a lease this session already holds), and the scoping phrase 'this session already holds' distinguishes it from claim_task and release_task in the sibling set.

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 cadence ('roughly every 3 minutes during long work'), names the failure branch (renewed=false -> stop, then call claim_task), and warns that retrying a failed renew never succeeds. When-to-use, when-not, and the alternative are all covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reorder_tasksA
DestructiveIdempotent
Inspect

Changes the manual order of tasks within one sibling group - the order the List and the Gantt display. Two input shapes: taskIds as the COMPLETE sibling group (every task sharing the same parentId, missing ids are refused) in its new order, together with projectId and parentId (null or omitted = top-level tasks); or taskId plus ONE of beforeTaskId / afterTaskId to move a single task relative to a sibling, with the full order computed server-side from the current order. The reference task must share the moved task's parent: reordering never changes a task's parent (that is update_task's parentId field). Requires the project.edit permission on the project; the reordered view is shared by everyone on it. Returns the group in its resulting order.

NameRequiredDescriptionDefault
taskIdNoRELATIVE shape: the task to move.
taskIdsNoFULL shape: the complete sibling group in its new order.
parentIdNoFULL shape: the shared parent task id, or null/omitted for top-level tasks.
projectIdNoFULL shape: the project whose sibling group is being reordered.
afterTaskIdNoRELATIVE shape: place taskId immediately after this sibling.
beforeTaskIdNoRELATIVE shape: place taskId immediately before this sibling.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the safety profile (readOnly=false, destructive=true, idempotent=true, openWorld=false); the description adds genuinely new behavioral context: it requires the project.edit permission, the resulting order is shared with everyone on the project, missing sibling ids in the FULL shape are refused rather than partially applied, and the RELATIVE shape's order is computed server-side. These are auth, blast-radius and error-semantics details the structured fields 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?

Purpose is front-loaded in the first clause, and most of the length is load-bearing (permissions, refusal rule, sibling constraint, return value). It is still a single dense run-on paragraph of parentheticals; breaking the two input shapes into clearly separated sentences or bullets would improve scannability without losing content.

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 6 parameters, 0 required, no output schema and no nested objects, the description covers everything an agent needs: both invocation shapes, the constraint that the operation never reparents, the permission prerequisite, the shared-visibility side effect, and the fact that the resulting group order is returned. Nothing material is left to inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, but the description adds interaction semantics the schema does not: it defines the two mutually exclusive input shapes, explains that null/omitted parentId means top-level tasks, and adds the constraint that the reference task must share the moved task's parent. It stops short of stating the exact required-parameter combinations per shape, which a zero-required-param schema would benefit from.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb+resource+scope: 'Changes the manual order of tasks within one sibling group - the order the List and the Gantt display.' It explicitly separates itself from sibling mutations, noting that changing a task's parent 'is update_task's parentId field,' so an agent can distinguish reorder_tasks from update_task, move_task_to_epic and move_task_to_sprint 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?

Gives clear when-to-use guidance for its two modes (complete sibling group vs. single-task relative move) and names update_task as the alternative for reparenting. It does not, however, contrast itself against other ordering-affecting siblings such as gantt_optimize, resource_leveler_analyze or auto_schedule_proposal, so the exclusion set against the wider tool list is incomplete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

request_user_inputAInspect

Ask the human PAT holder a question and wait for their answer via the get_user_input poll. Required: question (1-2000 chars). Optional: options (string[] of up to 10 choices; when set, the human must pick one), taskId (binds the prompt to a task so it appears on that task's detail panel), timeoutMinutes (1-120, default 30; after this the prompt flips to TIMED_OUT inline on the next get_user_input poll). Returns { requestId, status: "PENDING" }; poll get_user_input(requestId) until status changes. Fires an in-app + email notification at the PAT holder so they know to answer.

NameRequiredDescriptionDefault
taskIdNoOptional task to bind the prompt to.
optionsNoUp to 10 choice strings; human must pick one. Free-text answer when omitted.
questionYes1-2000 chars.
timeoutMinutesNoInteger 1-120. Default 30.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavior beyond annotations: it fires in-app + email notifications at the PAT holder, the timeout flips the prompt to TIMED_OUT inline on the next poll, and the initial return is { requestId, status: "PENDING" }. Annotations only declare the mutation/idempotency profile (readOnly=false, idempotent=false), which this description is consistent with.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first clause, followed by parameters, return shape, and side effects in a dense but non-redundant order. Every sentence carries information; only the parameter recap is slightly repetitive of 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?

With no output schema, the description correctly supplies the return shape, the poll contract for resolving it, the notification side effect, and the timeout behavior. Nothing an agent needs to initiate and correctly follow up on this request 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 real meaning: options forces a single-choice answer versus free text, taskId binds the prompt to a task detail panel, and timeoutMinutes describes the downstream TIMED_OUT consequence rather than just its range and 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 and resource ('Ask the human PAT holder a question') and immediately distinguishes itself from its companion poll tool by naming get_user_input as the retrieval mechanism. An agent can tell this is the initiation half of an async Q&A pair 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 clear context and the required follow-up workflow: call this to create the request, then 'poll get_user_input(requestId) until status changes.' It does not explicitly state when NOT to use it (e.g., synchronous alternatives), but the async round-trip pattern is fully spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resolve_issueA
DestructiveIdempotent
Inspect

Close out an Issue with a resolution note. status: RESOLVED (fixed), WONT_FIX (closed without fix), or DEFERRED (parked). Stamps resolvedAt. An OPEN issue reaches RESOLVED, WONT_FIX or DEFERRED directly, so a newly filed issue can be resolved in one call with no intermediate step. An INVESTIGATING or BLOCKED issue is also eligible. CLOSED and WONT_FIX are terminal, and an already-RESOLVED issue moves only to CLOSED or back to INVESTIGATING.

NameRequiredDescriptionDefault
statusNoDefault RESOLVED.
issueIdYes
resolutionYesHow it was resolved (1-10000 chars).

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (destructiveHint=true, idempotentHint=true), the description discloses the state machine: which statuses are reachable, which are terminal, and that resolvedAt is stamped. This is exactly the mutation semantics an agent needs and cannot get from the annotations alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense and front-loaded, with the core action first and transition rules after; every sentence carries state-machine information. It is slightly over-packed, and the closing sentence about CLOSED/INVESTIGATING introduces states that complicate rather than clarify.

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 covers reachable states, terminal states, and side effects well. It is marred by referencing CLOSED and INVESTIGATING destinations that the status enum does not permit, which could mislead an agent about valid inputs.

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 67% schema coverage, the description usefully expands the status enum ('RESOLVED (fixed), WONT_FIX (closed without fix), DEFERRED (parked)') and notes the mutation's effect on resolvedAt. The resolution text parameter's role is only described in the schema, not here.

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+resource ('Close out an Issue') and immediately enumerates the three resolution outcomes, distinguishing it from sibling tools like update_issue. An agent knows exactly what operation this performs from the first sentence.

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 eligibility and transition rules ('An OPEN issue reaches RESOLVED, WONT_FIX or DEFERRED directly', 'CLOSED and WONT_FIX are terminal'), which functions as strong when-to-use/when-not guidance. It never names the obvious alternative (update_issue) for non-resolution edits, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resource_leveler_analyzeA
Destructive
Inspect

Analyze resource allocation for a project. Returns per-user, per-week overallocations and suggested task reschedules to flatten the load. Deterministic (no AI call), fast and free to call on every plan that includes resourceMgmt (PRO+). Use mode="preview" (default) to inspect suggestions before committing; use mode="apply" to capture a baseline and apply all suggested reschedules immediately (requires project Owner or Manager role). Use this before leveling_narrative to get the raw data, or directly to answer "who is overloaded and by how much this week?"

NameRequiredDescriptionDefault
modeNopreview (default): return analysis without writing. apply: capture a baseline then apply all reschedule suggestions. Requires project Owner or Manager role.preview
projectIdYesID of the project to analyze for resource overallocation.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond the annotations: determinism (no AI call), cost profile (fast and free to call), the fact that apply captures a baseline and mutates immediately, and the Owner/Manager role requirement. This clarifies that only mode=apply is destructive, which the destructiveHint annotation alone cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose and then the mode guidance; every sentence is doing work, though the mode explanation partially duplicates the schema. Appropriately sized 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?

For a two-parameter tool with no output schema, the description supplies the return contents, cost/determinism expectations, mutation semantics, and permission requirements, so an agent has everything needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already documents both mode and projectId in detail, so the description mainly restates the preview/apply semantics. Baseline 3 is appropriate when the schema carries the parameter detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Analyze resource allocation for a project') and describes the return shape ('per-user, per-week overallocations and suggested task reschedules'). It is clearly distinguishable from the narrative-oriented sibling leveling_narrative.

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 use each mode (preview to inspect before committing, apply to capture baseline and commit) and routes the agent relative to an alternative ('Use this before leveling_narrative to get the raw data, or directly to answer...').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

restore_document_versionA
DestructiveIdempotent
Inspect

Restore a prior version of a workspace document as the new current bytes. Reversible: the current bytes are snapshotted as a new version first. Requires write access to the document. Refused with code DOCUMENT_LOCKED_FOR_APPROVAL while a workflow approval is open on the document.

NameRequiredDescriptionDefault
documentIdYesWorkspaceDocument id.
versionNumberYesThe version number to restore (>= 1).

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations already covering write, destructive, and idempotent hints, the description adds substantial behavioral context: the restore is reversible because the current bytes are snapshotted as a new version first, write access is required, and a specific error code is returned when a workflow approval is open. This goes well beyond 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?

The definition is four compact sentences, front-loaded with the action and effect, then reversibility, access requirement, and failure mode. 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.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutation tool with no output schema, the description covers effect, reversibility, required permissions, and a specific failure condition. No critical information needed to invoke it correctly appears to be 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 baseline is 3. The description refers to 'a prior version' but adds no syntax, range, or ID-format detail beyond what the schema already documents.

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: 'Restore a prior version of a workspace document as the new current bytes.' It clearly states the action and effect. However, it does not explicitly distinguish this tool from siblings like restore_page_version or list_document_versions, so it stops short of the top score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides prerequisites (requires write access) and a refusal condition (DOCUMENT_LOCKED_FOR_APPROVAL during an open approval), which is useful context. But it does not say when to choose this tool over alternatives such as update_document_content or list_document_versions, leaving usage routing implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

restore_page_versionA
DestructiveIdempotent
Inspect

Restore an earlier version of a web part page into the working draft. The current draft is snapshotted first (recoverable), then the chosen version is loaded into the draft. Does NOT auto-publish; call publish_page afterward to make it public. Requires contribute access.

NameRequiredDescriptionDefault
pageIdYesPage id.
versionNumberYesThe version number to restore (from get_page.versions).

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes beyond the destructiveHint/idempotentHint/readOnlyHint annotations by disclosing that the current draft is snapshotted first and is recoverable, and that contribute access is required. These are meaningful operational facts an agent needs (mitigated destruction, auth requirement) rather than restatements of the annotation profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tightly written sentences, front-loaded with the action, then side effects, then the required next step and permission. Every sentence carries distinct, useful information with no waste.

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 and only two well-documented params, the description covers the action, the draft-overwrite side effect and its recoverability, permission requirements, and the publish dependency. 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 pageId and versionNumber are already documented in the schema (including the 'from get_page.versions' hint). The description references 'the chosen version' but adds no format or sourcing detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource: 'Restore an earlier version of a web part page into the working draft.' The 'web part page' target clearly distinguishes it from sibling restore_document_version, and the 'into the working draft' scope tells the agent exactly what state is affected.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the follow-up action and why: 'Does NOT auto-publish; call publish_page afterward to make it public.' This routes the agent to the correct sibling. It lacks an explicit when-not-to-use condition, but the sequencing guidance is clear and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

revenue_at_riskA
Read-onlyIdempotent
Inspect

ENTERPRISE+ per-user breakdown of cost vs revenue at risk across a date window (≤90 days). Risk is each user's total-hours compliance gap (expected minus logged, across all projects) valued at their billable rate - not restricted to billable projects. Returns per-user rows sorted by marginAtRisk descending + per-currency totals (NOT normalized across currencies). Mirrors GET /api/compliance/revenue-at-risk. Permission: org.compliance.manage (default OWNER+/ADMIN+).

NameRequiredDescriptionDefault
toYesEnd of the window, YYYY-MM-DD. Span ≤ 90 days.
fromYesStart of the window, YYYY-MM-DD.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (which already cover read-only/idempotent/non-destructive), the description discloses meaningful behavior: enterprise-only availability, required permission scope, the ≤90-day window, risk not restricted to billable projects, and that per-currency totals are NOT normalized across currencies. Those last two are exactly the kind of non-obvious traits an agent needs and could not infer from structured data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is front-loaded with the core purpose, then layers the risk definition, return shape, and permission in logical order. It is dense and slightly long, but nearly every clause carries distinct information, so it earns its size.

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 deliberately covers the return shape (per-user rows sorted by marginAtRisk descending, plus per-currency totals), tells the agent what 'risk' means, and gives the underlying endpoint and permission. Nothing an agent needs to invoke or interpret the call 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 two date parameters are already documented. The description restates the ≤90-day span constraint but adds no format or semantic detail beyond what the schema's `to` field already says, making this a baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the exact verb+resource (per-user breakdown of cost vs revenue at risk) and pins down the domain-specific meaning of 'risk' as a compliance-hours gap valued at billable rate. An agent can tell this apart from generic risk or compliance 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?

It states gating prerequisites clearly (ENTERPRISE+ tier, `org.compliance.manage` default OWNER+/ADMIN+), which tells the agent when the call will be permitted. It does not, however, route between this and adjacent compliance tools like weekly_compliance or list_compliance_exceptions, so it stops short of 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.

run_readiness_checkAInspect

Run a project's readiness check now and record the result as evidence (a check row), changing nothing else: the project's status, items and waivers are untouched. Returns whether it passed, the required gaps, the enforcement mode and the full resolution. Use it to see what still blocks completing or archiving a project and to leave a dated record of that. Any caller who can read the project.

NameRequiredDescriptionDefault
projectIdYes
transitionNoCOMPLETE (the default) checks the criteria for completing the project; ARCHIVE the criteria for archiving it.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false but destructiveHint=false, which could confuse an agent; the description resolves this by stating it changes nothing else — 'the project's status, items and waivers are untouched' — and adds the caller's authorization requirement ('Any caller who can read the project'). It also discloses the return contents (pass/fail, required gaps, enforcement mode, resolution) despite having 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?

Front-loads the action and its key guarantee (records evidence, changes nothing else) in the first clause, then covers use case and return shape. Dense but every sentence carries 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 compensates by naming the returned fields, and it covers the side-effect profile, the non-destructive guarantee, and the auth requirement. An agent has everything needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: transition is documented inline with its default and enum meaning, while projectId is undocumented. The description's phrase 'completing or archiving a project' loosely evokes the transition enum but gives no added semantics 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?

Names a specific verb and resource ('Run a project's readiness check now and record the result as evidence (a check row)') and states the side effect precisely. It is clearly separable from the sibling get_readiness_status, which only reads status without recording a check row.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context for use: 'Use it to see what still blocks completing or archiving a project and to leave a dated record of that.' However it never names the obvious read-only alternative (get_readiness_status) or states when not to use this tool versus consulting existing results.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

save_project_as_templateAInspect

Save an existing project as a reusable template (PRO+ feature). The caller must be OWNER or MANAGER on the project. The template captures all top-level tasks and subtasks with relative date offsets.

NameRequiredDescriptionDefault
nameYesTemplate name, at least 1 char.
categoryNoOptional category label.
isPublicNoMake the template visible to other org members. Default false.
projectIdYesProject to capture.
descriptionNoOptional template description.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the non-read-only, non-destructive, non-idempotent profile, so the description must add value beyond that. It does: tier gating, an explicit authorization requirement, and the capture semantics (tasks, subtasks, relative date offsets). It omits that repeated calls create independent templates and does not describe the return 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 sentences, front-loaded with the action, followed by gating/permission and capture semantics. No filler and 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?

A mutation tool with no output schema where the safety profile is covered by annotations and parameters by the schema. The description adds the tier gate, authorization precondition, and capture scope, which is nearly everything an agent needs; only the post-call return 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 description coverage is 100%, so every parameter (name, category, isPublic, projectId, description) is already documented in the schema. The description adds no syntax, format, or defaulting detail 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: 'Save an existing project as a reusable template,' and adds scope detail that the template captures top-level tasks and subtasks with relative date offsets. This is enough to distinguish it from instantiate_template/update_template without opening either schema, 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 Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear conditions for use: PRO+ feature gating and the requirement that the caller be OWNER or MANAGER on the project. It does not state when-not to use it or point to alternatives such as duplicate_project or update_template, so it falls 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.

schedule_health_checkA
Read-onlyIdempotent
Inspect

Run a deterministic schedule-health check on an in-app project. Returns a 0-100 health score, an overall severity (info/warning/critical), an issues array covering: overdue tasks, project-end overruns, unassigned tasks, stuck-at-99% tasks, budget status, and data freshness (the share of in-play tasks touched in the last 7 days, with the oldest untouched task), plus a freshness block with those figures. No LLM call. No plan gate. Use when the user asks "how healthy is this project?" or as a pre-flight check before sprint planning. Does NOT write anything to the database.

NameRequiredDescriptionDefault
projectIdYesID of the project to health-check.

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. The description adds genuinely useful behavioral context beyond those: 'No LLM call. No plan gate.' and 'Does NOT write anything to the database.' These clarify cost and side-effect expectations that annotations don't express. No return-format details 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and returns, then usage, then the no-write guarantee. Mostly tight, though 'plus a freshness block with those figures' is mildly redundant since freshness was already enumerated. Every other clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description must carry the return-value burden, and it does so thoroughly: score range, severity enum, and each issue category plus the freshness block. For a single-param read tool this leaves nothing an agent needs missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter (projectId) with 100% schema description coverage, so the schema fully documents it. The description adds no extra syntax, format, or constraint detail for projectId. Baseline 3 is appropriate when the schema carries the 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?

States a specific verb and resource ('Run a deterministic schedule-health check on an in-app project') and enumerates the exact outputs (0-100 score, severity, issues array, freshness block). The scope is clearly distinct from generic risk tools. It does not, however, explicitly name the nearest siblings like get_schedule_risk or analyze_project_risks to differentiate itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear triggering context: use when the user asks 'how healthy is this project?' or as a pre-flight check before sprint planning. This is concrete usage guidance. It stops short of naming when NOT to use it or which alternative to pick instead (e.g., get_schedule_risk vs run_readiness_check), so it's a solid 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.

search_docsA
Read-onlyIdempotent
Inspect

Searches the Onplana docs (docs.onplana.com) and returns article excerpts: the readable step-by-step article text, quotable directly, for "how do I X", "explain Y" and "what does Z mean" questions. The companion to lookup_help_topic, which returns navigation paths rather than article bodies. No plan gate; all plans. SCOPE: docs coverage lags the product, so an empty result means no ARTICLE matched, which is not evidence that the capability is missing; describe_capabilities is the authoritative list of what is actually callable, including categories not yet loaded.

NameRequiredDescriptionDefault
queryYesKeywords or short phrase to search across article titles and content (max 300 chars).

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, closed-world, so the safety bar is met structurally. The description adds genuinely new operational context: no plan gate ('all plans'), and the important behavioral caveat that docs coverage lags the product, so empty results are not evidence of missing capability.

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, resource and return type, then scoping and caveats. Dense but each sentence carries distinct information; the parenthetical URL and 'SCOPE' label are slightly heavy for the payload but not wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter search tool with no output schema, the description covers what is returned (quotable article text), what an empty result means, and where to go for authoritative capability data. 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?

Single parameter with 100% schema description coverage ('Keywords or short phrase... max 300 chars'), so the schema already documents syntax and limits. The description adds no further query-shaping guidance beyond the example question forms, which is baseline-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 ('Searches the Onplana docs (docs.onplana.com)') plus the return shape ('article excerpts... readable step-by-step article text'). It explicitly distinguishes itself from the sibling lookup_help_topic, which returns navigation paths rather than article bodies.

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 question shapes that select this tool ('how do I X', 'explain Y', 'what does Z mean') and names the alternative (lookup_help_topic) with the property that differentiates it. It also routes the agent to describe_capabilities for capability questions, and warns that an empty result means no article matched rather than a missing capability.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_org_knowledgeA
Read-onlyIdempotent
Inspect

Semantic + lexical hybrid search across this org's indexed content: projects, tasks, risks, goals, comments, wiki pages, and (for callers who can open Clients in Onplana Services) the client records: companies, contacts and deals, under the "clients" scope. Use this BEFORE listing or scanning when the user asks "find me…" / "what was the rationale for…" / "have we discussed…" - it's an O(1) lookup against the embedding index and returns ranked snippets with similarity scores. Pass scope: "all" (default) for cross-cutting queries, or narrow to one type (projects, tasks, risks, goals, comments, wiki) when the user is clearly asking about that surface. Returns up to 20 ranked matches with similarity scores. Cosine similarity ranges 0–1; >0.7 is a strong match, 0.45–0.7 is plausible, lower scores are weak hints (the hybrid pipeline keeps them when a lexical BM25 hit backs them up, but treat sub-0.45 results as low-confidence). The floor is admin-tunable via the rag_min_similarity system config, so a deployed override can shift these bands. An empty matches array means either (a) no indexed content matched, or (b) the org hasn't populated its RAG index yet (Azure OpenAI embeddings unconfigured) - phrase your reply as "I didn't find anything matching that" rather than asserting confidently.

NameRequiredDescriptionDefault
limitNoMax results (default 6, max 20).
queryYesNatural-language search query. 5–500 chars.
scopeNoNarrow to one entity type or search all (default). Use "agentOutputs" to recall prior AI-agent deliverables. "clients" covers companies, contacts and deals and returns rows only for callers who can open Clients (Onplana Services, any member except a guest); "all" includes them for the same callers.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the read-only/idempotent annotations: it discloses result caps (20), the meaning of similarity bands (0–1, >0.7 strong, 0.45–0.7 plausible, <0.45 low-confidence), that the floor is admin-tunable via rag_min_similarity, and that an empty result may mean an unpopulated RAG index — advising hedged phrasing. It also flags permission gating for 'clients' 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 what it does and when to use it, then layers result interpretation. Dense but every sentence carries signal; the similarity-band and index-empty caveats are long yet operationally important, so only mild trimming is possible.

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 compensates by describing the return shape (up to 20 ranked matches with similarity scores) and the empty-array edge case. Combined with the permission notes and scope semantics, 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.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so baseline is 3; the description adds real value by clarifying the default/narrowing behavior of `scope` and the cross-cutting meaning of 'all', plus interpretation guidance for results. It adds less specific syntax for `limit` beyond what the schema states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (semantic + lexical hybrid search) and the exact corpus it covers (projects, tasks, risks, goals, comments, wiki, clients with sub-entities), which lets an agent distinguish it from plain list_* tools and from the generic `search`/`search_docs` siblings. The scope enumeration removes ambiguity about what gets searched.

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 trigger contexts ('find me…', 'what was the rationale for…', 'have we discussed…') and directs the agent to use it BEFORE listing/scanning, plus guidance on when to narrow scope vs. use scope:'all'. It stops short of naming alternative search siblings (e.g. search_docs, search) so the 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.

send_outlook_messageAInspect

Create a draft email in the authorized user's Outlook mailbox. Draft-only: it saves a draft and returns its id for the user to review and send themselves from Outlook — it never transmits. Recipients are optional (the human can fill them in when reviewing). Per-message external recipient cap: 10. The draft is owned by the connected user, not the agent.

NameRequiredDescriptionDefault
ccNo
toNoTO recipients (RFC 5322 addresses). Optional — leave empty for the human to fill in.
bccNo
bodyYes
subjectYes
bodyContentTypeNo

TDQS

A3.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false, openWorldHint=true, and idempotentHint=false. The description adds important behavioral context beyond those annotations: it returns an id, never transmits, has a per-message external recipient cap of 10, and the draft is owned by the connected user rather than the agent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and then adds only relevant constraints: draft-only behavior, optional recipients, recipient cap, and ownership. Every sentence adds useful information, and there is no wasted 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?

Given the annotations and lack of an output schema, the description covers essential call behavior: purpose, draft-only semantics, return id, recipient optionality, and ownership. It remains slightly incomplete because it does not explain bodyContentType or clarify cc/bcc semantics, though the schema partly covers required fields.

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 low at 17%, with only the 'to' parameter documented in the schema. The description adds that recipients are optional and mentions an external recipient cap, but does not explain cc/bcc distinction, subject/body requirements, or bodyContentType's text/html enum, leaving much parameter meaning 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?

The description states a specific verb and resource: create a draft email in the authorized user's Outlook mailbox. It also corrects the potentially misleading tool name by clarifying 'Draft-only ... it never transmits.' However, it does not explicitly distinguish this tool from sibling compose or messaging 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 implies usage by stating the draft is for the user to review and send themselves from Outlook, and that it never transmits. It does not name alternatives or give explicit when-not-to-use guidance. Usage is inferable but not fully specified.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_bulk_custom_field_valuesA
DestructiveIdempotent
Inspect

Upsert up to 50 custom field values in one call. All-or-nothing: if any value fails validation or access checks, no values are saved. Useful for batch-populating fields on a set of imported tasks.

NameRequiredDescriptionDefault
valuesYes

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=true and readOnlyHint=false. The description goes meaningfully beyond them by disclosing transaction semantics ('All-or-nothing: if any value fails validation or access checks, no values are saved') and the existence of access checks, which the annotations do not convey. It stops short of describing what happens to pre-existing values on upsert or the 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 tight sentences with zero filler: capability and limit first, the critical failure semantic second, the use case last. 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?

For a 1-parameter mutation with no output schema and annotations covering the safety profile, the description supplies the limit, atomicity guarantee, failure condition, and a representative use case. The remaining gap is the per-item field structure and enum, which an agent must read from 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 0% for the single array parameter, so the description carries some burden. It contributes the 50-item cap and the fact that items are keyed values, but says nothing about the item structure (fieldId, entityId, entityType enum, nullable value), leaving the enum and entity scoping undocumented anywhere.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Upsert ... custom field values') plus batch scope ('up to 50 ... in one call'), which implicitly distinguishes it from the singular set_custom_field_value sibling. It never names that sibling explicitly, so the differentiation is inferred from the batch/limit framing 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 final sentence gives one concrete context ('batch-populating fields on a set of imported tasks'), which implies when to reach for it over the single-value tool. There are no exclusions, prerequisites, or explicit alternative named, 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.

set_capacityA
DestructiveIdempotent
Inspect

Set a user's available hours for a given week. Users can update their own capacity; updating others requires org-level admin access. Feature: resourceMgmt (PRO+).

NameRequiredDescriptionDefault
userIdYesUser ID to update. Use caller's own ID for self-update.
weekStartYesMonday date (YYYY-MM-DD).
hoursAvailYes0 to 168 hours.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, so the write/overwrite nature is covered structurally. The description adds genuinely non-structured context: the authorization model (self vs admin) and the PRO+ / resourceMgmt feature gate, both of which affect whether a call can succeed.

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 followed by the permission constraint and feature gate. 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 mutation tool with full annotations and full schema coverage but no output schema, the description covers the essentials an agent needs: what changes, who may change it, and the plan requirement. It does not state what happens to previously stored capacity values or what a failure response looks like, leaving 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 description coverage is 100%, with userId, weekStart (Monday, YYYY-MM-DD) and hoursAvail (0-168) all documented in the schema. The description adds no additional parameter semantics, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (set) and resource (a user's available hours for a given week), which cleanly separates it from the read-side sibling get_capacity. An agent can tell immediately what state this tool mutates.

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 supplies a concrete selection rule: self-update is allowed for one's own capacity, while updating others requires org-level admin access. It lacks an explicit 'when not to use' or a named alternative (e.g., use get_capacity to read), so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_custom_field_valueA
DestructiveIdempotent
Inspect

Set (upsert) a custom field value on a task, project, or proposal. Pass value: null to clear the field. Caller must have write access to the target entity.

NameRequiredDescriptionDefault
valueNoNew value, or null to clear.
fieldIdYesCustom field definition id.
entityIdYesId of the task/project/proposal.
entityTypeYes

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, idempotentHint=true, and destructiveHint=true, so the safety profile is covered. The description adds real context beyond that: upsert semantics (create-or-update), the null-to-clear behavior that explains the destructive hint, and an explicit write-access requirement. It does not explain error behavior when the field definition is missing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action and scope, followed by the clearing behavior and the permission requirement. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers the mutation, upsert, clearing, and auth prerequisite for a 4-parameter mutation tool with no output schema. Missing only edge-case behavior (undefined fieldId, invalid entityType) which an agent might need for error handling.

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 most parameters are already documented in the schema (including 'New value, or null to clear'). The description largely restates the null-clearing semantics and adds entity-type scoping, without new syntax or constraint detail — 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 ('Set (upsert) a custom field value') and enumerates the target entity types (task, project, proposal). It does not explicitly name the sibling set_bulk_custom_field_values, so differentiation from the bulk variant is left to inference from 'a custom field value' (singular).

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 operational usage detail — pass value: null to clear, and caller must have write access — but never states when to prefer this over set_bulk_custom_field_values or update_* tools. Usage is implied by the singular, single-entity framing rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

submit_change_requestA
DestructiveIdempotent
Inspect

Submit a DRAFT change request for review (moves it to SUBMITTED). Only the original requester can submit. Feature: changeControl (ENTERPRISE+).

NameRequiredDescriptionDefault
changeRequestIdYesID of the change request to submit.

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, idempotentHint=true and readOnlyHint=false; the description adds real context on top by spelling out the DRAFT→SUBMITTED transition, the caller-identity restriction, and the feature-tier requirement. It doesn't explain downstream effects (approval routing, notifications, or why the operation is flagged destructive), which would be needed for a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with the core action first, then the permission constraint, then the feature gate. 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 single-parameter mutation with no output schema, the description covers the action, the resulting state, the authorization rule, and the edition requirement. It stops short of describing failure modes or side effects (who gets notified, whether review starts automatically), which would make it fully self-sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter and schema coverage is 100%, so the schema already carries 'ID of the change request to submit.' The description adds no format, sourcing, or lookup guidance for changeRequestId, 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 (Submit), the exact resource (a DRAFT change request), and the resulting state transition (moves it to SUBMITTED). This distinguishes it cleanly from create_change_request, submit_cr_review, implement_change_request and withdraw_change_request 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?

Gives a hard precondition ('Only the original requester can submit') and a licensing gate (changeControl ENTERPRISE+), which tells the agent when the call will be rejected. It does not explicitly name alternative tools for other actors (e.g. a CCB member path), 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.

submit_closeout_signoffA
Destructive
Inspect

Send a project's closeout for sign-off: names the reviewers and moves the closeout from DRAFT to IN_REVIEW with one pending sign-off each, and tells each reviewer. Without reviewerIds the reviewer is the project owner (every plan); naming anyone else, or more than one, is designated multi-reviewer sign-off, a plan feature. Reviewers are active members of the workspace, never guests. Sending again while IN_REVIEW replaces the panel and clears the decisions. Lessons learned lock once it is sent. Refused on a closeout not started (CLOSEOUT_NOT_FOUND) or signed off (CLOSEOUT_LOCKED). Needs project.edit. Returns the record get_closeout_status returns.

NameRequiredDescriptionDefault
projectIdYes
reviewerIdsNoOptional. User ids of the reviewers. Omitted, the project owner signs off.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: discloses that resending while IN_REVIEW replaces the panel and clears decisions, that lessons learned lock on send, that reviewers must be active workspace members (never guests), the required permission (project.edit), and the refusal codes (CLOSEOUT_NOT_FOUND, CLOSEOUT_LOCKED). This aligns with destructiveHint=true and idempotentHint=false rather than contradicting them.

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?

Information is front-loaded: the action and transition come first, then side effects, constraints, errors, and return shape. Dense but nearly every clause carries distinct information; only minor tightening is possible.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutation with no output schema, the description covers permissions, side effects, idempotency/replacement behavior, error refusals, and explicitly points the return value at get_closeout_status's record. 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.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only 50% schema coverage, the description compensates well for reviewerIds by defining the omitted-case default (project owner) and the multi-reviewer semantics; projectId is left implicit but is self-evident as the target project. No format/syntax detail (e.g. the max of 20) is added, but the substantive meaning is covered.

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 ('Send a project's closeout for sign-off') with the state transition (DRAFT to IN_REVIEW) spelled out, which separates it cleanly from sibling closeout tools like initiate_closeout, decide_closeout_signoff, and get_closeout_status.

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 context: without reviewerIds the project owner signs off, and naming other/multiple reviewers is a plan-gated multi-reviewer sign-off. It does not explicitly route the agent to the counterpart tools (e.g. decide_closeout_signoff for deciding), so it stops short of full when/when-not/alternatives guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

submit_cr_reviewAInspect

Submit an APPROVED/REJECTED decision on a change request that is SUBMITTED or UNDER_REVIEW. Eligible reviewers are project Managers and Owners, members of the organization's Change Control Board, and reviewers designated on the change request. An agent acting for a person reviews only where that person is eligible too. The requester cannot review their own change request, and neither can an agent acting for them. One review per (CR, reviewer) pair; a second returns CONFLICT. Plan gate: changeControl (ENTERPRISE+).

NameRequiredDescriptionDefault
commentNo
decisionYes
changeRequestIdYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false, idempotentHint=false, destructiveHint=false; the description corroborates and enriches these by stating one review per (CR, reviewer) pair with a second returning CONFLICT, plus a platform plan gate (changeControl ENTERPRISE+) and detailed authorization rules. This is behavior an agent cannot get from the annotations alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and decision, then layered rules in terse clauses. Despite the length, every sentence contributes a distinct constraint (state, eligibility, delegation, self-review ban, conflict, plan gate) 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?

For a governance mutation with no output schema, the description covers preconditions, authorization, delegation semantics, conflict behavior, and plan gating — everything needed to invoke correctly. Return-value discussion is unnecessary since 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 0%, so the description should carry the burden. It echoes the decision enum (APPROVED/REJECTED) but says nothing about changeRequestId or the optional comment parameter (whether it is required for REJECTED, etc.). The schema still defines the types and enum, so a mid-range score is warranted.

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 ('Submit an APPROVED/REJECTED decision on a change request') and pins the required precondition (state must be SUBMITTED or UNDER_REVIEW). This clearly separates it from siblings like submit_change_request (creates) and submit_proposal_review (different resource).

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 enumerates who may use it (Managers, Owners, CCB members, designated reviewers), the agent-delegation constraint, and the exclusions (requester cannot review their own CR, nor can an agent acting for them). It also states the conflict condition and the plan gate, leaving little to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

submit_proposal_reviewAInspect

Submit a gate review decision (APPROVED|REJECTED) on a proposal at a review gate (PROPOSAL_REVIEW / BUSINESS_CASE_REVIEW / PLAN_REVIEW) or at the stage just before one (SUBMITTED / BUSINESS_CASE / PLANNING), which enters that gate first. Optionally include criteriaScores[] for a weighted score, plus a comments string. It is the same decision a reviewer makes in the web app: any REJECTED rejects the proposal, all APPROVED advances it, otherwise it waits on the rest of the panel. When the gate has a reviewer panel the caller needs a pending seat on it (an org Owner/Admin can always decide); without a panel, org.governance.review. One review per person per gate. A decision notifies the submitter and sponsor, an advance seats the next gate's panel, and reaching the org's project-creation gate creates the project, whose id is returned as createdProjectId. Plan gate: governance.

NameRequiredDescriptionDefault
scoreNoOptional explicit 0-100 score; overridden by weighted compute when criteriaScores are supplied.
commentsNo
decisionYes
proposalIdYes
criteriaScoresNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnly=false, destructive=false, idempotent=false), it discloses permissions required, the one-review-per-person-per-gate constraint, notification side effects, panel-seating on advance, the project-creation side effect with createdProjectId in the response, and the panel-vote aggregation rule (any REJECTED rejects, all APPROVED advances).

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 gate values, then prerequisites and side effects. It is dense and slightly long, but nearly every clause carries distinct 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 complex, permission-gated mutation with no output schema, the description covers when it applies, who may call it, vote aggregation, notifications, and the returned createdProjectId, leaving nothing essential an agent would need.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 20%, so the description must compensate; it explains the decision enum, the criteriaScores[]-driven weighted score, and the comments string. proposalId gets no added meaning, but the non-obvious parameters are covered.

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+resource ('Submit a gate review decision... on a proposal') and enumerates the exact gate/stage values it accepts, which lets an agent separate it from siblings like advance_proposal_stage, submit_cr_review, and list_proposal_reviews.

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 conditions for use (at a review gate or the stage just before one) and states prerequisites: a pending seat on the reviewer panel, or org.governance.review without a panel, with Owner/Admin able to always decide. It stops short of explicitly naming an alternative sibling to use instead in other cases, 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.

submit_timesheetAInspect

Log hours against a task as a timesheet entry. Records under the calling user, on the specified task within the specified project. Hours: 0.25 (15 minutes) to 24, fractional values OK. Date: YYYY-MM-DD or ISO 8601. The entry starts in DRAFT status; submission for approval is a separate operation. Duplicate entries for the same (task, date) are rejected, edit the existing entry instead. Requires the timeTracking feature (PRO+). Caller must be a member of the project (or org admin).

NameRequiredDescriptionDefault
dateYesYYYY-MM-DD or ISO 8601.
hoursYesBetween 0.25 and 24, inclusive. Fractional values OK.
notesNoOptional free-text note about what the work covered.
taskIdYesTask to log time against.
projectIdYesProject the task belongs to. Sanity-checked server-side against taskId.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint=false, idempotentHint=false), the description discloses substantial behavior: the entry lands in DRAFT status, duplicates on (task, date) are rejected, the timeTracking feature (PRO+) is required, and the caller must be a project member or org admin. Only minor gaps remain (no failure/error behavior, no return shape).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is front-loaded with verb+resource and every sentence carries a distinct constraint (range, format, status, duplicates, feature gate, permissions). It is slightly dense and run-on, but 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 mutation tool with full schema coverage, rich annotations, and no output schema, the description supplies the missing operational context: creation state, duplicate handling, feature tier, and authorization requirements. 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 description coverage is 100%, so the schema already documents every parameter, including the hours range and date format the description repeats. The one genuine addition is the (task, date) uniqueness constraint, which is more behavioral than parameter semantics, 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?

The description states a specific verb and resource ('Log hours against a task as a timesheet entry') and clarifies ownership ('Records under the calling user, on the specified task within the specified project'). It is clear on its own, but it never distinguishes itself from the sibling create_timesheet_entry, which an agent could easily confuse it with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives real conditions: entries start in DRAFT and 'submission for approval is a separate operation', and duplicate (task, date) entries are rejected so the caller should edit the existing entry instead. That routes the agent away from re-creating, but it does not explicitly name the alternative tools or when to prefer create_timesheet_entry over this one.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

submit_timesheet_weekA
DestructiveIdempotent
Inspect

Submit all DRAFT timesheet entries for a given week (YYYY-MM-DD Monday date). Requires the org's timesheet approval to be enabled. Feature: timeTracking (PRO+).

NameRequiredDescriptionDefault
weekStartYesMonday date (YYYY-MM-DD) of the week to submit.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=false, destructive=true, and idempotent=true, so the safety profile is covered. The description adds genuinely new behavioral context beyond that: only DRAFT entries are affected, approval must be enabled org-wide, and the feature is gated to PRO+ tiers.

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 with zero filler; the core action is front-loaded and the prerequisites follow. Nothing needs trimming.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter mutation whose annotations carry the safety profile, the description covers scope, prerequisites, and feature gating. It omits what happens to entries after submission (e.g., whether they become locked or require an approver), which would be nice but is not essential.

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% for the single weekStart parameter and its schema description already says 'Monday date (YYYY-MM-DD) of the week to submit.' The description's restatement of the same format 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+resource+scope: 'Submit all DRAFT timesheet entries for a given week.' The word 'week' and 'all DRAFT entries' implicitly separates it from the single-entry sibling submit_timesheet, but the description never names that sibling to make the distinction 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?

It gives prerequisites ('Requires the org's timesheet approval to be enabled', 'Feature: timeTracking (PRO+)') which tell the agent when the tool is even usable, but it never routes between alternatives such as submit_timesheet for a single entry or the approve/reject week siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

summarize_projectA
Read-onlyIdempotent
Inspect

Generate an executive status summary for one project - covering what changed since sinceDays ago (default 7), top risks, current blockers, and recommended next steps. Returns structured fields the model can render. Caller must have visibility into the project.

NameRequiredDescriptionDefault
projectIdYes
sinceDaysNoDefault 7, max 90.

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, and closed-world behavior. The description adds useful context beyond that: return format ('structured fields the model can render'), a permission prerequisite, and the output scope (changes, risks, blockers, next steps).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences: the first states purpose and content scope, the second covers return format and permission needs. Front-loaded, no redundancy, and every sentence 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?

For a simple two-parameter read-only tool with no output schema, the description covers purpose, output content, default behavior, and permission requirements adequately. The main gap is routing guidance versus similar status/portfolio tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: sinceDays is already documented as 'Default 7, max 90.' The description restates its effect ('what changed since sinceDays ago'), adding marginal clarity, but says nothing about projectId (format, source, or why required). At 50% coverage it only partially compensates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource ('Generate an executive status summary for one project') with enumerated covered content (changes, risks, blockers, next steps). Scope is clear, but it does not name or distinguish itself from similar siblings like generate_status_report or compose_status_digest.

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, when-not, or alternative routing is provided. 'Caller must have visibility into the project' is a permission prerequisite, not usage guidance, leaving the agent to infer when this tool should be chosen over portfolio_summary or generate_status_report.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

test_run_workflowA
DestructiveIdempotent
Inspect

Fire a workflow against a synthetic context for testing. PRO+ feature (automations). Picks any existing task in the workflow's project (or any org task for org-wide workflows) and builds a synthetic context, then writes a WorkflowRun with workflowName suffixed "(test)" and runs the graph end-to-end. Returns the new runId. Use list_workflow_runs to monitor the result. MUTATION: writes a WorkflowRun row + may fire downstream step actions. Permission: automation.manage on the workflow's project (or org MANAGER+ for org-wide workflows).

NameRequiredDescriptionDefault
workflowIdYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description significantly enhances behavioral transparency beyond the annotations. It details that the operation is a "MUTATION" and clarifies that this mutation involves writing a WorkflowRun row *and* potentially firing downstream step actions, which is crucial context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but highly efficient, front-loading the core function immediately. While long, every clause provides high-value context regarding execution, naming, side effects, and permissions.

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?

The definition is extremely complete, providing details on context building, naming conventions, mutation severity, and the necessary permissions. It ensures the agent knows not only how to run the test but also how to verify the outcome.

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?

With 0% schema description coverage, the description should have clarified the expected format or constraints of the `workflowId`. Instead, it focuses heavily on the operational context of the tool rather than the semantics of the input parameter itself, failing to compensate 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?

The description clearly defines the purpose: firing a workflow for testing purposes using a synthetic context. It distinguishes itself from standard workflow runs by stating the resulting workflowName is suffixed with "(test)".

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 provides excellent guidance by specifying the required context (synthetic context) and detailing how to track the outcome. It explicitly directs the user to use `list_workflow_runs` to monitor the result after the test run.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

test_webhookA
DestructiveIdempotent
Inspect

Send a test payload to an existing webhook endpoint (BUSINESS+ feature). Requires org.webhook.manage (default Admin+). Returns whether the endpoint responded successfully and the response duration in ms.

NameRequiredDescriptionDefault
webhookIdYesId of the webhook to test.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=false, openWorld=true, idempotent=true, destructive=true. The description adds real value beyond those: the required permission scope, the plan-tier gate, and the return content (success flag plus response duration in ms). It still does not say what payload is sent or how failures/timeouts surface, hence not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One dense sentence that front-loads the action and then stacks the tier, permission, and return-value facts in a compact, readable order. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully states what is returned (success status and duration in ms), and it covers the auth/tier gate. It leaves open edge behavior such as timeouts, retries, or what the test payload contains, so it is strong but not fully exhaustive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with a single, fully documented webhookId parameter, so the baseline is 3. The phrase 'an existing webhook endpoint' reinforces that the id must reference an existing webhook but adds no format or syntax detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: send a test payload to an existing webhook endpoint. This is unambiguously distinct from siblings like get_webhook or list_webhook_deliveries, and an agent can identify the action without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear preconditions for use: the endpoint must already exist, the tool is a BUSINESS+ feature, and it requires org.webhook.manage (default Admin+). It does not name an alternative (e.g., list_webhook_deliveries for inspecting real deliveries), but the context is sufficiently explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

unarchive_projectA
Destructive
Inspect

Unarchive a project so it can be changed again and shows in project lists. The project keeps its completed or cancelled status and its closeout as they were; reopening it is a separate status change afterwards (update_project), which resets the closeout to DRAFT. Refused with NOT_ARCHIVED when the project is not archived. Needs the project Owner or Manager role, or org.compliance.manage.

NameRequiredDescriptionDefault
projectIdYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations covering the safety profile (destructiveHint=true, idempotentHint=false), the description adds substantial non-structured context: what state is preserved (completed/cancelled status and closeout), the side effect of the follow-up update_project (resets closeout to DRAFT), the exact error code NOT_ARCHIVED, and the required authorization (Owner/Manager role or org.compliance.manage).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences, front-loaded with the primary effect before the state-preservation caveat, the error case, and the auth requirement. Every clause carries information, though the middle sentence is packed and could be split for readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description carries the burden and does so: it covers the effect, preserved state, the distinct follow-up step, the failure mode, and the permission requirement. Nothing an agent needs to invoke this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is one parameter (projectId) with 0% schema description coverage, so the description must compensate. It refers to 'the project' but never states the expected identifier form (ID vs name) or where to obtain it; for a single self-evident ID parameter this is a minor gap, not a severe one.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (unarchive) plus resource (project) with an explicit statement of the effect ('can be changed again and shows in project lists'). It is unambiguously distinct from the archive_project sibling and from update_project, which is named as the separate reopening step.

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 clearly separates this operation from the subsequent status change (update_project) that actually reopens the project, and states the precondition that the project must currently be archived (NOT_ARCHIVED refusal). It gives strong context, though it never explicitly contrasts with archive_project or says when an agent should prefer this over deleting/recreating.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

unassign_tagA
DestructiveIdempotent
Inspect

Remove a tag from a task or project. Provide either taskId or projectId, not both. Removing a tag that is not on the target succeeds as a no-op (removed: false in the result).

NameRequiredDescriptionDefault
tagIdYesId of the tag to remove.
taskIdNoRemove from this task. Mutually exclusive with projectId.
projectIdNoRemove from this project. Mutually exclusive with taskId.

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, idempotentHint=true, and readOnlyHint=false. The description adds useful behavior beyond annotations by explaining that removing an absent tag succeeds as a no-op with removed: false, though it does not cover permissions or all success-result behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with purpose and followed by the key targeting constraint and no-op behavior. Every sentence contributes useful information without padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter mutation tool with full schema coverage and annotations covering safety, the description sufficiently explains target selection and no-op behavior. It could optionally state success behavior or permissions, but no essential invocation detail is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the schema already documents tagId, taskId, and projectId including their mutual exclusivity. The description repeats the mutual-exclusion rule but adds no syntax, format, or selection detail beyond what the schema 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: "Remove a tag from a task or project." It clearly distinguishes the operation from siblings like assign_tag, create_tag, and list_tags 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 concrete targeting rule: "Provide either taskId or projectId, not both." That is clear usage guidance, but it does not explicitly compare this tool to assign_tag or say when removal is preferred over alternative tag operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_closeout_lessonsA
DestructiveIdempotent
Inspect

Record a project's lessons learned on its closeout while it is DRAFT. values maps a lesson key to its text: wentWell, toImprove, scheduleVarianceReason, budgetVarianceReason and leavesBehind (impacts that continue after handover and who inherits each). Null or an empty string clears a lesson; keys not sent keep their answer. The organization may label the keys differently; get_closeout_status returns the labels. Refused before the closeout is started (CLOSEOUT_NOT_FOUND) and once it is in review or signed off (CLOSEOUT_LOCKED). Needs project.edit. Returns the record get_closeout_status returns.

NameRequiredDescriptionDefault
valuesYes
projectIdYes

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds a lot beyond the annotations: null/empty string clears a lesson (matching destructiveHint=true), unsent keys are preserved (patch semantics), the permission requirement, the precise error gating, and a return-value reference. The destructive and idempotent hints are explained rather than merely declared.

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?

Dense but front-loaded: purpose and state constraint lead, followed by the key semantics, then clearing/patch behavior, then gating/errors. Every sentence contributes distinct, actionable information with no padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, it still tells the agent the return value ('the record get_closeout_status returns'). Combined with permission, state gating, and error codes, 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.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden and does: it names every lesson key with its meaning, explains that null/empty clears and omitted keys persist, and notes that orgs may relabel the keys. Only projectId goes unremarked, which is self-evident from the closeout 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?

Specific verb (Record) plus resource (a project's lessons learned on its closeout) and a state constraint (while DRAFT). It is immediately distinguishable from sibling closeout tools like initiate_closeout, get_closeout_status, and submit/decide_closeout_signoff.

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 the usable state (DRAFT), the two refusal conditions with error codes (CLOSEOUT_NOT_FOUND before start, CLOSEOUT_LOCKED in review/signed off), the required permission (project.edit), and points to get_closeout_status for org-specific key labels.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_cost_lineA
DestructiveIdempotent
Inspect

Change a cost line: its label, amount (in the project currency), status (EXPECTED, COMMITTED, SPENT, in any direction, e.g. back to EXPECTED when an order is cancelled), category, date, task or note. Pass only the fields to change; null clears category, date, taskId or note. Every change is kept in the line's history (get_cost_line_history). Access: the project budget's write rule.

NameRequiredDescriptionDefault
dateNoThe day, YYYY-MM-DD; null clears it. A SPENT line counts in earned value actual cost from this day (from the day it was entered when there is none).
noteNoFree text, at most 2000 characters; null clears it.
labelNoWhat the money is for, e.g. "Electrical works". 1 to 200 characters.
amountNoThe amount in the PROJECT currency, at most 2 decimal places, 0 or more.
statusNoEXPECTED (planned, nothing ordered), COMMITTED (ordered, a purchase order), SPENT (paid or invoiced). Defaults to EXPECTED on create.
taskIdNoA task in the same project this cost belongs to; null clears it.
categoryNoThe project's own grouping word, e.g. "Works". At most 80 characters; null clears it.
costLineIdYes

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=true; the description adds real value on top by stating that every change is retained in the line's history (so edits are auditable/reversible) and by naming the governing permission ('the project budget's write rule'). It also discloses that null actively clears category/date/taskId/note, which is the destructive behavior an agent most needs warned about.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the verb and affected fields; the null-clearing rule and the history/permission notes each earn their place. The embedded parenthetical example about a cancelled order is slightly verbose but clarifies the enum behavior.

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 covers the essentials: which fields change, how to clear them, that history is preserved, and what access is required. Only the response shape and failure modes (e.g., invalid costLineId or cross-project taskId) are left 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 88%, so a baseline of 3 applies, but the description goes further by explaining the patch-only convention and demonstrating status transitions ('back to EXPECTED when an order is cancelled') and that amount is in the project currency. Those are semantics an agent would otherwise have to infer from individual 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?

The description opens with a specific verb and resource ('Change a cost line') and immediately enumerates the mutable fields, which cleanly separates it from create_cost_line, list_cost_lines and get_cost_line_history. An agent can tell exactly what this tool does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Pass only the fields to change' establishes patch semantics explicitly, and the pointer to get_cost_line_history tells the agent where to verify results. It stops short of naming when to use update vs. create/re-create a line, but the mutation context is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_custom_field_defA
DestructiveIdempotent
Inspect

Update a custom field definition (rename, change options, toggle required, set default). Requires customFields (PRO+) and org admin/manager (or project owner/manager for project-scoped fields). Scope changes (project vs org-wide) must use the REST /promote endpoint.

NameRequiredDescriptionDefault
nameNoNew name, 1-100 chars.
defIdYesId of the field definition to update.
optionsNoReplacement options list (DROPDOWN/MULTI_SELECT).
requiredNoWhether this field is mandatory.
descriptionNoUpdated description.
defaultValueNoNew default value.

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, idempotentHint=true, and openWorldHint=false, but the description adds the non-obvious tier gate and authorization model, plus an out-of-band constraint (scope changes require /promote). It stops short of noting that replacing the options list can invalidate existing stored values.

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 action and its sub-operations, followed by prerequisites and the scope exception. No filler or restated title 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?

No output schema exists, but this mutation tool's description covers permissions, entitlements, and the scope-change escape hatch, which is what an agent most needs before calling it. Minor gap: it doesn't say what happens to existing values when the options list is replaced.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and every parameter already carries its own description, so the schema does the heavy lifting. The description's enumerated operations loosely map to name/options/required/defaultValue but add no format or constraint detail beyond the schema (e.g., it doesn't explain defId usage).

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 (update) plus resource (custom field definition), with the mutable aspects enumerated: rename, options, required, default. This cleanly separates it from create_custom_field_def, list_custom_field_defs, and set_custom_field_value (which sets values, not definitions).

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 the entitlement and role prerequisites (customFields PRO+, org admin/manager, or project owner/manager for project-scoped fields) and explicitly routes scope changes to the REST /promote endpoint instead. It does not explicitly contrast with the sibling value-setting tools, 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.

update_dependencyA
DestructiveIdempotent
Inspect

Change an existing task dependency's type or lag in place; the link keeps its id. Address it by its row id (dependencyId, from list_dependencies or from the error link_dependency returns when the pair is already linked), or by the two task ids it joins (predecessorId + successorId) when exactly one link joins them. Pass type (FINISH_TO_START, START_TO_START, FINISH_TO_FINISH, START_TO_FINISH), lag, or both; a field left out keeps its value. Lag is in lagUnit, days by default, or hours or minutes for a finer lag; negative values are lead time. Requires the project-level dependency.manage permission on the successor's project, as linking does. A type the pair already holds is refused, since one pair holds each type at most once. When the values sent are already the link's the call succeeds with changed: false and writes nothing. Otherwise the successor and the tasks after it are rescheduled, and rescheduled counts them; in a project with automatic scheduling off it is 0 and the response carries autoScheduleOff: true. previous holds the type and lag the edit replaced. No plan gate.

NameRequiredDescriptionDefault
lagNoThe new lag in lagUnit. Left out: unchanged. Negative for lead time.
typeNoThe new link type. Left out: unchanged.
lagUnitNoUnit for lag: days (default), hours, or minutes. Only with lag.
successorIdNoSuccessor task id. Use WITH predecessorId instead of dependencyId.
dependencyIdNoTaskDependency row id from list_dependencies.
predecessorIdNoPredecessor task id. Use WITH successorId instead of dependencyId.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, and the description adds concrete substance behind both: the successor and downstream tasks are rescheduled, rescheduled counts them, autoScheduleOff: true when automatic scheduling is off, and identical values yield changed: false with no write. It also discloses the required dependency.manage permission on the successor's project and the absence of a plan gate.

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 mutation and identity-preservation fact, then parameter rules, then side effects and response shape. Dense and mostly waste-free, though the sentence on refusal/idempotency and the response fields could be tightened without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers addressing, permissions, defaults, refusal semantics, idempotency, rescheduling side effects, and the response fields (rescheduled, autoScheduleOff, previous) even though no output schema exists. An agent has everything needed to call this correctly and anticipate the outcome.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: omitted fields retain values, lagUnit defaults to days, negative lag is lead time, and the two addressing modes (dependencyId vs predecessorId+successorId, valid only when exactly one link joins them) are mutually exclusive. This goes beyond the schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource+scope: 'Change an existing task dependency's type or lag in place; the link keeps its id.' This cleanly distinguishes it from link_dependency (create) and unlink_dependency (remove), which an agent can select among 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 names the alternative creation path ('as linking does'), tells the agent where the identifiers come from (list_dependencies, or the error link_dependency returns), gives a fallback addressing mode, and states a when-not condition ('A type the pair already holds is refused'). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_document_contentA
DestructiveIdempotent
Inspect

Replace the body of an existing text/markdown workspace document (use draft_document to create a new one, read_document_content to read). Max 100 KB. Requires project.content.create. Binary documents (PDF, images) cannot be edited this way. Refused with code DOCUMENT_LOCKED_FOR_APPROVAL while a workflow approval is open on the document.

NameRequiredDescriptionDefault
documentIdYesThe document id to overwrite.
contentMarkdownYesNew UTF-8 markdown/text body. Max 100 KB. Replaces the whole body.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, but the description goes further: it discloses the required permission (project.content.create), the 100 KB size cap, the inapplicability to binary documents, and the specific refusal code DOCUMENT_LOCKED_FOR_APPROVAL while an approval is open. That is materially useful behavior an agent cannot infer from the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences, each carrying distinct information: purpose plus siblings, limits/permissions, and error/lock behavior. Front-loaded with the operation, no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description still covers the mutation's constraints (size cap, permission, non-text exclusion, lock refusal code) that an agent needs to call it successfully. Nothing material is left undocumented for a 2-parameter destructive write.

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 both documentId ('document id to overwrite') and contentMarkdown ('new UTF-8 markdown/text body. Max 100 KB. Replaces the whole body'). The description's mention of the 100 KB limit and whole-body replacement duplicates the schema rather than adding new semantics, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Replace the body of an existing text/markdown workspace document') and immediately disambiguates against siblings draft_document and read_document_content. An agent can distinguish this from create/read operations without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the alternatives for the adjacent operations (draft_document to create, read_document_content to read) and states when the tool is inapplicable: binary documents (PDF, images) cannot be edited this way. It also gives the precondition that triggers refusal.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_epicA
DestructiveIdempotent
Inspect

Partially update one Epic. Pass only the fields you want to change: title (2-200 chars; "name" accepted as a deprecated alias until 2026-11-27), description (string up to 5000 chars, or null to clear), color (hex like "#6366F1" or CSS name), order (non-negative integer; explicit slot in the project's epic order). Caller must have project.content.create on the project.

NameRequiredDescriptionDefault
nameNoDEPRECATED alias for title (accepted until 2026-11-27). Prefer title.
colorNoHex (#RGB / #RRGGBB) or CSS name.
orderNoNon-negative integer.
titleNoNew epic title, 2-200 chars (canonical field name).
epicIdYesEpic to update.
descriptionNoUp to 5000 chars, or null to clear.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, but the description adds genuinely non-structured context: the required permission (project.content.create), the 'null to clear' behavior that explains the destructive nature for the description field, and the dated deprecation window for the name alias. It still does not spell out any other consequence of the destructive hint, 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?

A single dense paragraph that front-loads the action and semantics, then enumerates fields. Every clause (length bounds, null-clearing, hex format, slot semantics, permission) carries operational information, so there is no 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 only needs to cover invocation, and it does: all six parameters are addressed, permissions are stated, and the deprecation timeline is given. The one remaining gap is that destructiveHint=true is not fully justified beyond null-clearing, so it is not fully exhaustive.

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 a 3 is the baseline; the description earns above that by explaining merge semantics and by glossing 'order' as an explicit slot in the project's epic order, which adds meaning beyond the schema's bare 'Non-negative integer'. It mostly restates the length/format constraints already 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 (partially update) and resource (one Epic), with 'partially' signaling PATCH semantics. Among the many sibling update_* tools, the resource noun makes it unmistakable versus update_task, update_issue, or update_sprint, and it is clearly distinct from create_epic/get_epic.

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?

'Pass only the fields you want to change' explicitly frames this as a merge-style PATCH and tells the caller how to invoke it. It does not name adjacent alternatives (e.g., move_task_to_epic, create_epic) or state when not to use it, so it falls just 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.

update_evaluation_criterionB
DestructiveIdempotent
Inspect

Update an org-specific evaluation criterion. Requires org.governance.manage. Feature: governance (ENTERPRISE+).

NameRequiredDescriptionDefault
nameNo1-100 chars.
orderNo
weightNo
optionsNo
maxScoreNo1-100.
fieldTypeNo
criterionIdYes
descriptionNo

TDQS

B3.1/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=true, so the mutation and idempotency profile is covered. The description usefully adds the permission scope and enterprise feature gating, but omits what the destructive update actually overwrites (e.g., whether omitted fields are cleared), which is the key unknown for a destructive tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short, front-loaded sentences with no padding; the operation is stated first, then requirements. The 'Feature: governance (ENTERPRISE+)' fragment is terse to the point of being slightly cryptic, but nothing is wasted.

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 a destructive 8-parameter mutation with 25% schema coverage and no output schema, the description is under-specified: it never explains the partial-vs-full update semantics, field types, or which fields are optional beyond criterionId. Permissions and tier are covered, but the operational detail 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.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Eight parameters with only 25% schema description coverage: the description adds no meaning for name, order, weight, options, fieldType, criterionId, or description. With low coverage the description must compensate, and it offers nothing about what each updatable field does or whether the update is partial.

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 org-specific evaluation criterion') and scopes it as org-specific, which distinguishes it from the create/list siblings in the naming family. It does not explicitly name or differentiate from create_evaluation_criterion or list_evaluation_criteria, but the verb makes the distinction obvious.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides real gating context — 'Requires org.governance.manage' and 'Feature: governance (ENTERPRISE+)' — which tells an agent whether the call can succeed. It stops short of stating when to choose this over siblings or when not to use it, so usage is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_goalA
DestructiveIdempotent
Inspect

Partially update one goal. Pass only the fields you want to change: title, description (or null to clear), status (NOT_STARTED / ON_TRACK / AT_RISK / BEHIND / COMPLETED / CANCELLED), startDate (ISO or null), dueDate (ISO or null), projectIds (replaces the linked-project set; pass empty array to unlink all). Caller must own the goal or have the org.project.view.all permission.

NameRequiredDescriptionDefault
titleNo1-200 chars.
goalIdYesGoal id. Required.
statusNo
dueDateNoISO date or null to clear.
startDateNoISO date or null to clear.
projectIdsNoReplaces the linked-project set.
descriptionNoUp to 10000 chars; null clears.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds behavioral specifics not in the annotations: null clears fields, projectIds replaces the linked set, and an empty array unlinks all. It also discloses the ownership/permission requirement. Return/pagination behavior is not described, keeping it out of the top tier.

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 then a single dense field list where each entry carries invocation-relevant content. Some redundancy with the schema prevents a 5, but there is little wasted prose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter mutation with no output schema, the description covers partial-update semantics, null-clearing, replacement behavior, and the auth requirement. It does not describe the response shape, but with no output schema that is an acceptable 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 86%, so the schema already documents the parameters and enum values, establishing the baseline of 3. The description largely restates those fields; its only genuine addition is 'pass empty array to unlink all' for projectIds, which is a modest increment over 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 ('Partially update one goal') and the partial-update semantics, so an agent can distinguish it from create_goal or update_key_result_value without opening the schema. It stops short of explicitly naming or contrasting a sibling, so it does not reach the top tier.

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 context ('Pass only the fields you want to change') and a concrete prerequisite ('Caller must own the goal or have the org.project.view.all permission'). It does not name alternatives or when-not-to-use cases, so it lacks the explicit routing of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_ideaA
DestructiveIdempotent
Inspect

Update an idea: sharpen its title or detail, file it to a project, or move its status (NEW / EXPLORING / PARKED / DROPPED). PROMOTED is NOT settable here , use promote_idea, so the idea links to the work it became. Pass expectedUpdateRevision (from get_idea) to avoid clobbering a concurrent edit.

NameRequiredDescriptionDefault
titleNo1-500 chars.
ideaIdYes
statusNo
projectIdNoFile the idea to a project.
descriptionNo
expectedUpdateRevisionNoOptimistic-concurrency guard.

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 (readOnlyHint=false, destructiveHint=true, idempotentHint=true), so the bar is lower, yet the description still adds real context: a domain restriction on the status enum and an optimistic-concurrency guard that prevents clobbering concurrent edits. It does not explain the revision-mismatch failure behavior or whether unspecified fields are preserved, 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?

Three dense sentences, front-loaded with the mutability scope and the promote_idea exclusion before the concurrency note. Slightly over-packed and the inline enum recap repeats schema data, plus minor typographic noise ("here , use"), but 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 no-output-schema mutation tool, the description covers the mutable surface, the forbidden transition, the sibling route, and the concurrency contract an agent needs to call it safely. The only gaps are post-mismatch behavior and partial-update semantics, which are secondary given the destructiveHint already flags mutation risk.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 50%, so the description must carry weight — and it does for status (enumerates the four legal values), projectId ("file it to a project"), and expectedUpdateRevision (explains it is a concurrency token taken from get_idea, which goes beyond the schema's terse "Optimistic-concurrency guard"). ideaId and description are left implicit, hence a 4 rather than 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 ("Update an idea") and then enumerates exactly what is mutable: title, detail, project filing, and status. It explicitly carves out the one status value it does not handle and names the sibling that does, so an agent can distinguish it from promote_idea without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit negative case with a named alternative ("PROMOTED is NOT settable here, use promote_idea") and states the condition under which expectedUpdateRevision should be supplied (concurrent-edit protection, value sourced from get_idea). This is precisely the when/when-not/alternative routing the dimension wants.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_issueA
DestructiveIdempotent
Inspect

Patch an Issue. Any subset of: title, description, type, severity, status, ownerId, targetResolutionAt, resolution. Status changes are state-machine guarded, and naming one forbidden jump understated it, so here is the whole map: OPEN -> INVESTIGATING | DEFERRED | WONT_FIX; INVESTIGATING -> BLOCKED | RESOLVED | WONT_FIX | DEFERRED; BLOCKED -> INVESTIGATING | WONT_FIX | DEFERRED; RESOLVED -> CLOSED | INVESTIGATING; DEFERRED -> OPEN | INVESTIGATING; CLOSED and WONT_FIX are terminal. Note RESOLVED is not reachable from OPEN. PROMOTED is not settable here at all. Pass expectedUpdateRevision (from get_issue) for optimistic concurrency - a mismatch returns a conflict so concurrent agents do not clobber each other. To resolve/defer/wont-fix with a resolution note, PREFER resolve_issue.

NameRequiredDescriptionDefault
typeNo
titleNo
statusNo
issueIdYes
ownerIdNoUser id, or empty string to unassign.
severityNo
resolutionNo
descriptionNo
targetResolutionAtNoISO datetime, or empty to clear.
expectedUpdateRevisionNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by publishing the full status state-machine map, noting CLOSED/WONT_FIX are terminal and PROMOTED is not settable here, and explaining the optimistic-concurrency conflict behavior. Annotations already flag destructive/idempotent, so the added transition and concurrency detail is genuinely incremental.

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 purpose and field list, then layers in the transition map and concurrency note. The state-machine enumeration is long but each arc is load-bearing for correct invocation; slightly dense prose costs it a point.

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 10 parameters, 20% schema coverage, no output schema, and destructive/idempotent annotations, the description supplies the missing behavioral and concurrency context an agent needs. Remaining gaps are minor enum semantics, which are largely self-describing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 20% (ownerId and targetResolutionAt), yet the description compensates by clarifying the field set, the reachable status targets, and that expectedUpdateRevision is the concurrency token with a conflict on mismatch. Enum value meanings (type, severity) are not explained, keeping it just 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 ('Patch an Issue') and enumerates exactly the mutable fields (title, description, type, severity, status, ownerId, targetResolutionAt, resolution), so an agent immediately knows the scope and can distinguish it from create_issue or resolve_issue.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: 'To resolve/defer/wont-fix with a resolution note, PREFER resolve_issue', and tells it to pass expectedUpdateRevision from get_issue. Both a when-to-use alternative and a prerequisite are named directly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_key_result_valueA
DestructiveIdempotent
Inspect

Log a progress update on a key result (manual KRs only, KRs with TASK_COUNT / TASK_PERCENTAGE rollup are auto-calculated and reject manual writes). Required: krId, value (the new current value). Optional: note (short context for the audit log). Any org member except a Guest may log progress.

NameRequiredDescriptionDefault
krIdYesKeyResult id. Required.
noteNoOptional short note explaining the update.
valueYesNew currentValue. Required.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=false, destructive=true and idempotent=true, so the safety profile is covered. The description adds genuinely new behavior: which KR types reject the write, the audit-log side effect of the note, and the permission scope. It does not say what happens to the prior value, but destructiveHint covers that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tightly packed sentences, purpose front-loaded, required/optional parameters called out inline, and no filler. Every clause carries an actionable constraint.

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 covers what it does, the rollup exclusion, required params, and authorization. It stops short of describing the success response or what the audit-log entry contains, which is a minor gap given the annotations already flag destructiveness and idempotency.

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 beyond the schema by clarifying that 'value' is the new current value and that 'note' feeds the audit log, which the schema wording ('explaining the update') does not state.

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 ('Log a progress update on a key result') and immediately scopes it to manual KRs only. The rollup-type restriction makes it unmistakable against adjacent tools like create_key_result or update_goal, 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 Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when NOT to use it: KRs with TASK_COUNT / TASK_PERCENTAGE rollup are auto-calculated and reject manual writes. It also gives the permission condition ('Any org member except a Guest'). No alternative tool is named for the auto-calculated case, so it falls 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.

update_member_roleA
DestructiveIdempotent
Inspect

Update an organization member's role (OWNER/ADMIN/MANAGER/MEMBER/GUEST). Guards: cannot demote the last OWNER (LAST_OWNER conflict); only an existing OWNER can promote another user to OWNER. Permission: org.member.role.update (default ADMIN+) plus the OWNER-promote rule.

NameRequiredDescriptionDefault
roleYes
userIdYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as a destructive, idempotent, non-read-only mutation, and the description goes well beyond that by disclosing the authorization model and specific failure modes (LAST_OWNER conflict, OWNER-promote restriction). This is exactly the extra behavioral context annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense, front-loaded passage: purpose first, then guards, then permission. The parenthetical enum list duplicates the schema enum and is the one mildly wasteful element, but nothing else 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?

For a two-parameter mutation with no output schema, the description covers the important unknowns: authorization, guards, and error conditions. It stops short of describing the response or whether the change takes effect immediately, leaving a small residual gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for two parameters. The description re-lists the role enum (already in the schema, so no added value) and implies via 'another user' that userId identifies a target user, but gives no format guidance (opaque ID vs. email) for the required userId.

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 (organization member's role) with the full value domain (OWNER/ADMIN/MANAGER/MEMBER/GUEST), which separates it from siblings like add_project_member or list_org_members that also touch membership. An agent can tell what this does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly states the permission scope (org.member.role.update, default ADMIN+) and the two guard conditions under which the call will fail (last-OWNER demotion, OWNER-only promotion), which is strong when-to-use context. It does not name alternatives (e.g., use list_org_members to resolve userId, add_project_member for project-level roles), so an explicit exclusion is missing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_milestoneA
DestructiveIdempotent
Inspect

Update milestone fields: title, dueDate, completed (toggle). Flipping completed=true stamps completedAt=now(); flipping back clears it. Requires the project-level milestone.create permission, held by project MEMBER and above under the default matrix, or org admin.

NameRequiredDescriptionDefault
titleNo
dueDateNoISO date
completedNo
milestoneIdYes

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 a derived side effect (completed=true stamps completedAt=now(); flipping back clears it) and the exact authorization requirement (milestone.create permission, MEMBER and above under the default matrix, or org admin). These are non-obvious behaviors that annotations alone (destructiveHint/idempotentHint) do not convey, and nothing here contradicts them.

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 field list and followed by the two highest-value details (side effect, permission). Every clause carries information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still covers the mutable surface, the notable side effect, and the authorization gate for a destructive-capable write. Nothing essential for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25% (only dueDate is annotated as ISO date), so the description must compensate — and it does for 'completed' by explaining its toggle semantics and derived completedAt behavior. It adds no format detail for title or milestoneId, which remain self-evident but unannotated.

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 milestone fields') and enumerates exactly which fields are mutable (title, dueDate, completed). An agent can immediately distinguish it from create_milestone, get_milestone, list_milestones, and propose_milestone_completion.

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 field list and permission note imply the usage context (editing an existing milestone), but the description never states when to use this versus alternatives like propose_milestone_completion or update_task, nor any when-not conditions. Usage is inferable rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_notification_preferencesA
DestructiveIdempotent
Inspect

Update the calling user's notification preferences. Pass only the fields you want to change; all others stay as-is. Useful when an agent is starting a noisy batch operation and wants to mute emails temporarily.

NameRequiredDescriptionDefault
riskEmailsNoThe weekly risk digest for projects the user owns or manages.
pushEnabledNoMaster switch for push notifications to the mobile apps. Separate from email: turning email off does not silence the phone, and vice versa.
taskOverdueNoNotify when a task goes overdue.
emailEnabledNoMaster switch for all email notifications. Overrides every per-type setting below, including the ones that are otherwise always sent.
taskAssignedNoNotify on task assignment.
weeklyDigestNoReceive weekly digest emails.
approvalEmailsNoEmails for approval requests and intake form submissions.
projectUpdatesNoNotify on project-level updates.
securityEmailsNoOccasional account-protection advice, such as turning on two-step sign-in.
workflowEmailsNoEmails when an automation or workflow run fails.
timesheetEmailsNoEmails for timesheet submissions, reviews, reminders, and the weekly compliance digest.
productUpdateEmailsNoThe monthly product-update email describing what changed in Onplana.
setupReminderEmailsNoMonthly reminders about workspace setup steps that are still open, sent to owners and admins until everything is decided.

TDQS

A4.1/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=true). The description adds real context beyond them: it is a partial patch ('pass only the fields you want to change; all others stay as-is') and it only ever touches the caller's own account. It stops short of explaining why the call is flagged destructive (muting notifications can suppress email).

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 verb and scope, followed by the patch contract and the motivating use case. Every sentence carries distinct information and none is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 13-parameter, no-output-schema mutation, the description covers scope, patch semantics, and the primary use case, and the schema documents each toggle including the emailEnabled override. It does not touch on any rate limits or whether changes are reversible, but nothing essential to calling it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

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, and all 13 fields are individually documented in the schema. The description still adds non-schema semantics: unspecified fields are left unchanged, making this a patch rather than a full replacement, which is not derivable from the parameter list alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (update) plus resource (notification preferences), with the scope narrowed to 'the calling user's' preferences, which disambiguates it from tools that mutate other users. It does not name or contrast with the read sibling get_notification_preferences, so it falls just short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete when-to-use scenario ('starting a noisy batch operation and wants to mute emails temporarily'), which tells an agent why it would reach for this tool. There is no when-not guidance or comparison against adjacent tools such as dismiss_notification or get_notification_preferences.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_pageA
DestructiveIdempotent
Inspect

Update a web part page: metadata (title/icon) and/or content. Content updates require expectedUpdateRevision (from get_page); a mismatch means someone else changed the page first and the write is rejected with UPDATE_REVISION_MISMATCH, which a fresh get_page resolves. Requires contribute access. Publishing is separate: publish_page makes changes public.

NameRequiredDescriptionDefault
iconNoOptional emoji icon, or null to clear.
titleNoOptional new title (1-255 chars).
pageIdYesPage id.
contentNoOptional new Puck Data JSON (requires expectedUpdateRevision).
expectedUpdateRevisionNoRequired when content is set: the updateRevision from your last get_page.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: it discloses optimistic-concurrency semantics, the exact failure code UPDATE_REVISION_MISMATCH, its cause (another writer), and the recovery path (a fresh get_page). Annotations only give destructiveHint/idempotentHint, so this adds substantial operational context.

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 two update modes, then the concurrency precondition, then the publish boundary. Every clause carries distinct information with no repetition of 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 destructive, nested-object mutation with no output schema, the description supplies permissions, concurrency rules, error recovery, and the publish hand-off. 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.

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 extra credit by explaining the conditional relationship between content and expectedUpdateRevision and what happens on a stale revision, which the schema only states as a plain requirement.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Update a web part page') and immediately scopes it into two modes: metadata (title/icon) and content. This distinguishes it cleanly from get_page, create_page, and publish_page 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 Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: content updates require expectedUpdateRevision from get_page, and 'Publishing is separate: publish_page makes changes public' names the sibling and the condition that selects it. The contribute-access prerequisite is also stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_portfolioA
DestructiveIdempotent
Inspect

Update a portfolio name or description (BUSINESS+ feature). Caller must be the portfolio owner or have org.portfolio.manage permission.

NameRequiredDescriptionDefault
nameNoNew name (at least 2 chars).
descriptionNoNew description.
portfolioIdYesId of the portfolio to update.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructive=true, idempotent=true, and readOnly=false, so the safety profile is covered structurally. The description adds non-obvious context beyond them: an authorization requirement (owner or org.portfolio.manage) and a plan-tier gate (BUSINESS+). It does not explain what 'destructive' means here (overwriting prior name/description), leaving a small gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, purpose front-loaded before the permission caveat, with no filler. The '(BUSINESS+ feature)' parenthetical is slightly cryptic but compact enough to be worth its 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?

With no output schema and full schema coverage, the definition needs mainly to establish purpose, auth, and plan gating, all of which it does. It omits a minor edge case: only portfolioId is required, so behavior when neither name nor description is supplied (no-op vs. error) is 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 portfolioId, name, and description are all self-documented (including the 2-char minimum on name). The description only restates that name/description are the updatable fields and adds no format or constraint detail, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (update) and resource (portfolio) plus the exact mutable fields (name, description), so it is clearly distinct from create_portfolio, get_portfolio, and update_project. It does not explicitly name a sibling alternative, which keeps it from a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete preconditions for use: the caller must be the portfolio owner or hold org.portfolio.manage, and the operation is gated behind the BUSINESS+ tier. No when-not-to-use case or alternative tool is named (e.g., what to use for members or projects in a portfolio), 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.

update_projectA
DestructiveIdempotent
Inspect

Partially update one project: name, description, status (PLANNING/ACTIVE/ON_HOLD/COMPLETED/CANCELLED), startDate, endDate, budget (number or null), color, retainedLogic (true: the remaining work of a started task waits on its links, so a late predecessor pushes it; false: a started task holds). Only supplied fields change. Caller must have project.edit on the project. Project progress is not writable here: it is derived from the progress of the tasks underneath, so it changes through update_task rather than through this tool.

NameRequiredDescriptionDefault
nameNo2-255 chars.
colorNo
budgetNo
statusNo
endDateNoISO date - must be after startDate when both set.
feeAmountNoFIXED_FEE / MILESTONE: the sold fee, distinct from budget (the cost plan).
projectIdYes
startDateNoISO date.
statusDateNoISO date the schedule is reported "as of" (MS Project Status Date, P6 Data Date). null clears, meaning today.
descriptionNo
billingModelNoHow the project bills: TIME_AND_MATERIALS (hours x rate), FIXED_FEE (feeAmount recognised by approved-hours share of estimatedHours, capped), RETAINER (retainerAmount per retainerPeriod, over-servicing above retainerIncludedHours), MILESTONE (milestoneSchedule amounts recognised as linked milestones complete). Changing it clears the other models' terms.
retainedLogicNoHow a started task meets its links. true (retained logic): its remaining work waits on its incoming links, so a late predecessor pushes it. false (the default): it holds at its actual start. Takes effect on the next reschedule, and only while the server switch retained_logic_enabled is on.
estimatedHoursNoFIXED_FEE: hours the fee was priced on.
retainerAmountNoRETAINER: fee per period.
retainerPeriodNo
milestoneScheduleNoMILESTONE: [{ label, amount, milestoneId? }], each milestone linked at most once.
retainerIncludedHoursNoRETAINER: hours the fee covers per period.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes beyond the annotations by disclosing the authorization requirement ('Caller must have project.edit on the project') and clarifying that the operation is a merge-style partial update rather than a full overwrite, which softens the destructiveHint=true annotation. It doesn't warn that changing status to COMPLETED/CANCELLED or changing billingModel clears other models' terms is irreversible, though that detail lives in the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense paragraph, front-loaded with the verb and field list, with the permission and progress-exclusion constraints appended. Most sentences earn their place, though the retainedLogic explanation is the longest clause and largely repeats 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 17-parameter mutation tool with no output schema, the description covers identity, partial-update semantics, authorization, and the most common non-obvious pitfall (progress is derived). Remaining gaps are the billing-model parameters and their side effects, which are documented in the schema but not signposted in the description.

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 description restates the status enum verbatim from the schema and re-explains retainedLogic, which the schema already documents in more depth (including the retained_logic_enabled server switch). It omits the eight billing-related parameters (feeAmount, billingModel, estimatedHours, retainer*, milestoneSchedule) and statusDate, so with 65% schema coverage it neither duplicates nor compensates fully — baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb, resource and semantics ('Partially update one project') and enumerates the writable field surface (name, description, status, dates, budget, color, retainedLogic). It also explicitly bounds scope by naming what is NOT writable (progress) and routing that to update_task, which distinguishes it from the many sibling update_* tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear positive context ('Only supplied fields change' → use for partial edits) and an explicit exclusion plus alternative: progress is derived and 'changes through update_task rather than through this tool'. It does not cover adjacent cases such as billing-model switching side effects or when to prefer this over update_portfolio/update_milestone, so it falls short of a full when/when-not map.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_proposalA
DestructiveIdempotent
Inspect

Update business-case fields on a governance proposal. Submitter or org.governance.review can edit. Only editable in pre-terminal stages (DRAFT through ON_HOLD). Stage transitions DO NOT happen here — use advance_proposal_stage. Sponsor must be an active org member. Pass null to clear nullable fields. Plan gate: governance (ENTERPRISE+).

NameRequiredDescriptionDefault
titleNo1-255 chars.
currencyNo3-letter ISO code.
priorityNo
riskLevelNo
sponsorIdNo
departmentNo
proposalIdYes
descriptionNo
estimatedBudgetNo
expectedBenefitsNo
estimatedDurationNoWeeks.
strategicAlignmentNo
businessJustificationNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses auth requirements, stage restrictions, the null-to-clear semantic that explains the destructiveHint=true annotation, the active-member constraint on the sponsor, and the plan gate. This aligns with and enriches the annotations rather than contradicting them.

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?

Roughly six short clauses, all front-loaded with the core purpose first, followed by permissions, constraints, alternative, null semantics, and plan gate. Every sentence carries distinct, 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?

For a mutation tool with no output schema and rich annotations, the description covers the aspects an agent needs: who may edit, which stages permit edits, where stage transitions belong, how to clear fields, and the plan gate. Nothing operationally required 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 only 23%, so the description must compensate; it addresses the nullable-field semantic ('pass null to clear') and the sponsorId active-member requirement, which is valuable. However, it leaves most of the 13 fields (priority/riskLevel enums, currency, budget, etc.) unexplained 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 precise verb and resource (update business-case fields on a governance proposal) and explicitly distinguishes itself from sibling advance_proposal_stage by declaring that stage transitions do not happen here. An agent can tell exactly what this tool mutates versus what it does not.

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 authorized actors (submitter, org.governance.review), the valid stage window (DRAFT through ON_HOLD), the alternative for stage moves (advance_proposal_stage), and the plan gate (governance ENTERPRISE+). When-to-use and when-not are both explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_sprintA
DestructiveIdempotent
Inspect

Update sprint fields: name, goal (null to clear), status (PLANNING/ACTIVE/COMPLETED/CANCELLED), startDate, endDate. Caller must be the project-level sprint.manage permission, held by project MEMBER and above under the default matrix, or org admin. endDate must be >= startDate. Plan gate: sprints (PRO+).

NameRequiredDescriptionDefault
goalNo
nameNo
statusNo
endDateNoISO date
sprintIdYes
startDateNoISO date

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 and idempotentHint=true, so the safety profile is covered. The description adds real behavioral context beyond that: goal=null clears the field, endDate must be >= startDate, and the required permission/plan gate. This is a meaningful disclosure 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: fields first, then permissions, then validation, then plan gate. Every sentence carries information; no filler. Slightly packed but appropriate for the number of constraints conveyed.

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 (so return values need not be explained), the description supplies permissions, validation, plan gate, and field semantics. It is complete enough to invoke correctly; the only gap is alternative-tool routing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33% (just the ISO date params), so the description must compensate. It does: it maps each updatable field, documents the null-to-clear semantics of goal, and states the cross-field startDate/endDate constraint the schema cannot express. Status enum values are already in the schema, so listing them is minor redundancy.

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 (Update sprint) and enumerates the exact mutable fields (name, goal, status, dates), so an agent knows precisely what it touches. It stops short of 5 because it never differentiates itself from adjacent siblings like update_task or update_epic.

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 clearly states access prerequisites (sprint.manage, project MEMBER+, or org admin) and the sprints (PRO+) plan gate, which is useful context for whether a call will succeed. However, it gives no when-to-use-vs-alternatives routing (e.g., move_task_to_sprint or create_sprint_with_tasks), leaving selection to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_taskA
DestructiveIdempotent
Inspect

Partially update one task. Pass only the fields you want to change: title (string, 1-500 chars), description (string or null to clear, up to 10000 chars), status (TODO/IN_PROGRESS/REVIEW/DONE/BLOCKED), priority (LOW/MEDIUM/HIGH/CRITICAL, a ranking label that does not put a task on the critical path), dueDate (ISO or null to clear), startDate (ISO or null), assigneeId (user id or null to unassign), progress (0-100), estimatedHours (number or null to clear), agentBrief (per-task agent spec, string or null to clear), isMilestone (boolean), constraintType (ASAP/ALAP/MSO/MFO/SNET/SNLT/FNET/FNLT or null) + constraintDate + deadline (ISO dates or null), plannedCost + fixedCost + baselineCost (currency numbers or null), recurringRule ({freq,interval,endDate?} object or null), previewUrl + prUrl (URLs or null to clear), isManual (for a task with subtasks: true keeps its own dates, false takes them from its subtasks, null follows the project). A date, duration or constraint change on a task whose dates come from its subtasks is refused with code:"PARENT_DATES_FROM_SUBTASKS"; change a subtask, or send isManual:true with the dates. Optional notify="owner"|"assigner"|"both" sends a notification to the assignee, the creator, or both. Optional reason adds a comment with the supplied text and includes it in the notification body. Caller must have task.edit.any on the project, or task.edit.own + ownership. Optional expectedUpdateRevision guards against overwriting a concurrent edit: when it no longer matches, the call SUCCEEDS with applied:false and code:"UPDATE_REVISION_MISMATCH" and writes nothing, so read applied before treating the task as changed. A real write returns applied:true. In a project with automatic scheduling off, a date or duration change moves no other task, and the result carries autoScheduleOff:true. When the edit moves the project finish, the result carries finishMove: the old and new finish, what changed, the driving chain, and plain sentences. PREFER bulk_update_status when flipping status on 2+ tasks at once; PREFER bulk_update_tasks when applying the SAME multi-field patch to 2+ tasks.

NameRequiredDescriptionDefault
prUrlNoSource-control PR URL, or null to clear.
titleNoNew title (1-500 chars).
dryRunNoPreview only. Return the per-field diff (current vs proposed) + currentUpdateRevision without committing. Writes nothing and fires no side effects. Pair with expectedUpdateRevision on the real call.
notifyNoSend a notification to owner (assignee), assigner (creator), or both.
reasonNoFree-text reason for the update, up to 5000 chars. Adds a comment + appears in the notification body.
statusNo
taskIdYesTask to update.
dueDateNoISO date or null to clear.
noCacheNoBypass idempotency dedup for this call (re-runs apply on a byte-identical retry). Use only when a prior write was confirmed lost; prefer expectedUpdateRevision.
deadlineNoHard deadline (distinct from dueDate target); ISO date or null to clear.
isManualNoFor a task with subtasks: true keeps its own dates, false takes its start and due from its subtasks, null follows the project.
parentIdNoMove task to a different parent. Pass null to move to project root.
priorityNoPriority label (LOW/MEDIUM/HIGH/CRITICAL) that people set to rank work. It is not the critical path: the schedule engine computes that from dependencies, durations and the calendar, and priority does not change it.
progressNoInteger 0-100.
fixedCostNoFixed cost (currency, 2dp), or null to clear.
startDateNoISO date or null to clear.
agentBriefNoPer-task agent spec/brief, or null to clear. Up to 20000 chars.
assigneeIdNoUser id or null to unassign.
previewUrlNoDeployed preview URL, or null to clear.
actualStartNoISO date work actually began. Stamped automatically from startDate the first time the task leaves TODO or gains progress. Changing it on a task that is not DONE and not pinned by MSO or MFO moves startDate to it and dueDate to where the remaining work finishes; sending dates too lets the dates win. null clears.
descriptionNoNew description, or null to clear.
isMilestoneNoFlip the task into (true) or out of (false) milestone mode.
plannedCostNoPlanned cost (currency, 2dp), or null to clear.
baselineCostNoBaseline/original-budget cost (currency, 2dp), or null to clear.
recurringRuleNoRecurring config { freq: daily|weekly|monthly, interval: int>=1, endDate?: ISO|null }, or null to stop recurring.
constraintDateNoISO date for the constraint, or null to clear.
constraintTypeNoMS Project constraint: ASAP/ALAP (as soon/late as possible), MSO/MFO (must start/finish on), SNET/FNET (start/finish no earlier than), SNLT/FNLT (start/finish no later than), or null to clear.
estimatedHoursNoEstimated hours of effort; null to clear; matches create_task contract.
expectedUpdateRevisionNo§U3 optimistic-concurrency guard. Pass Task.updateRevision from your last read; mismatch returns UPDATE_REVISION_MISMATCH so concurrent agents don't silently overwrite each other.
originalDurationMinutesNoPlanned duration in working minutes (a day is the project calendar's hoursPerDay, default 8h = 480). Setting it on a task with a startDate moves dueDate to match; sending dates too lets the dates win. null clears.
remainingDurationMinutesNoWorking minutes left. Defaults to original x (1 - progress); DONE forces 0. On a started task (actualStart set) that is not DONE and not pinned by MSO or MFO, changing it moves dueDate to where that work finishes, counted from the later of actualStart and the project status date; sending dates too lets the dates win. null clears.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Far exceeds annotations: discloses the PARENT_DATES_FROM_SUBTASKS refusal, the expectedUpdateRevision concurrency guard and its applied:false/UPDATE_REVISION_MISMATCH semantics, notification behavior for notify/reason, the autoScheduleOff result flag, and the finishMove return payload. The destructive/idempotent hints are consistent and the description adds substantial context the annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action and the routing advice, but the middle is a long run-on enumeration of all 31 fields that duplicates the schema nearly verbatim, inflating length without adding value. The genuinely novel behavioral content is buried inside that enumeration rather than separated out.

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 31-parameter destructive mutation with no output schema, the description covers permissions, concurrency guard, error codes, notification side effects, scheduling side effects, and the shape of the result (applied, autoScheduleOff, finishMove). An agent has everything needed to call it correctly and interpret the outcome.

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 97%, so the schema already documents the 31 parameters well; a baseline of 3 applies. The description largely restates schema field wording (ranges, enum values, priority-as-label explanation) with little new per-parameter meaning, though grouping the fields is mildly helpful.

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: 'Partially update one task', immediately signalling a single-task PATCH-style edit rather than a create or bulk operation. It names the sibling tools it is NOT and the conditions that select them, so the agent can distinguish update_task from bulk_update_status and bulk_update_tasks without reading schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit guidance on the update contract ('Pass only the fields you want to change') plus explicit routing rules: 'PREFER bulk_update_status when flipping status on 2+ tasks' and 'PREFER bulk_update_tasks when applying the SAME multi-field patch to 2+ tasks'. It also states the precondition (task.edit.any on the project, or task.edit.own + ownership). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_task_collaboratorsA
DestructiveIdempotent
Inspect

Add or remove collaborators on one task: people who work on it besides its single assignee. A collaborator sees the task in their My Work, is notified about it and may update it, but cannot reassign it or change who collaborates. Name people in add and remove by user id, full or first name, or email; a reference that matches no single org member is reported in warnings and left out. Each person must be an active member of the task's project and is never the assignee; anyone the server does not add or remove is listed in skipped with a reason (NOT_ORG_MEMBER, NOT_PROJECT_MEMBER, IS_ASSIGNEE, ALREADY_COLLABORATOR, NOT_COLLABORATOR, CAP_REACHED). Requires task.assign plus task.edit.any or holding the task, except that anyone may remove themselves. Returns the task's collaborators after the change.

NameRequiredDescriptionDefault
addNoPeople to add, by user id, name or email. At most 50.
dryRunNoPreview only: resolve the people and check the permission, write nothing.
removeNoPeople to remove, by user id, name or email. At most 50.
taskIdYesThe task to change.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: it discloses the permission model, the self-removal exception, the notification/side effects of becoming a collaborator, how unresolvable references are surfaced in `warnings`, the full enum of `skipped` reasons, and the return payload. The destructiveHint is contextualized by showing exactly what removal does and what it does not do.

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 and role definition, then permissions and return value. It is dense and long, but each sentence carries distinct information; the skip-reason enum could arguably be trimmed since such reasons are also discoverable at runtime.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description correctly states the return value ('the task's collaborators after the change'), and it covers permissions, ambiguity handling, dry-run behavior, and failure modes. An agent has everything needed to invoke and interpret this 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 real meaning: `add`/`remove` accept user id, full name, first name, or email, and an ambiguous reference is dropped and reported rather than erroring. It also clarifies dryRun semantics ('resolve the people and check the permission, write nothing'), which the schema only summarizes.

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 (add/remove collaborators on one task) and immediately scopes it against the sibling concept of a single assignee, so an agent can distinguish it from assign_task without opening the schema. The role semantics (sees in My Work, notified, may update, cannot reassign) 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 Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear conditions for use: requires task.assign plus task.edit.any or task ownership, with an explicit exception that anyone may remove themselves, and implies the assignee is never a collaborator. It does not explicitly name an alternative tool (e.g. assign_task for changing the assignee) or state when not to use it, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_templateA
DestructiveIdempotent
Inspect

Update project template metadata (name, description, category, isPublic). The snapshot is immutable — re-save from a project to rebuild it. Caller must be the template creator or an org admin. Plan gate: templates (PRO+).

NameRequiredDescriptionDefault
nameNo
categoryNo
isPublicNo
templateIdYes
descriptionNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds meaningful behavior beyond annotations: the snapshot is immutable, edits only touch metadata, and there are permission and plan prerequisites. This clarifies the destructiveHint=true annotation (it applies to overwriting metadata, not the snapshot). No rate/limit or response details, but the safety profile is well covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences: purpose first, then the immutability caveat, then permissions and plan gate. No filler, though the permission and plan-gate facts could be consolidated slightly.

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 covers purpose, prerequisites, and the key immutability constraint. It omits whether unspecified fields are left unchanged and what errors/validation apply, but overall it is sufficient to invoke the 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 0% across 5 parameters, so the description must carry the load. It names four fields (name, description, category, isPublic), mapping them to the intended semantics, but says nothing about the required templateId or nullability of category/description, leaving clear gaps.

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 ('Update project template metadata') and enumerates the mutable fields, so the scope is clear. It does not explicitly name siblings like get_template or save_project_as_template, relying on the reader to infer the metadata-vs-snapshot distinction.

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 context: caller must be the template creator or an org admin, and there is a PRO+ plan gate. It also explains the snapshot cannot be edited and must be rebuilt by re-saving from a project, which is effectively a when-not-to-use note. It stops short of naming the alternative tool (e.g., save_project_as_template) for rebuilding.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_timesheet_entryA
DestructiveIdempotent
Inspect

Update date, hours, or notes on the calling user's own DRAFT or REJECTED timesheet entry. SUBMITTED and APPROVED entries must be returned first. Feature: timeTracking (PRO+).

NameRequiredDescriptionDefault
dateNoISO date (YYYY-MM-DD).
hoursNo0.25 to 24.
notesNo
entryIdYes

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 (readOnlyHint=false, idempotentHint=true, destructiveHint=true), and the description adds ownership scoping ('calling user's own'), the entry-state gate, and a feature/tier requirement (timeTracking PRO+). It does not explain return values or whether omitted fields are left unchanged, but the added constraints are genuinely useful.

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: the mutable fields and ownership scope come first, the state gate second, the tier caveat last. 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 mutation tool with no output schema, the description covers the critical preconditions (ownership, entry state, feature tier) that determine whether the call will succeed. It omits partial-update semantics and error behavior, which are the remaining 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 coverage is 50%: date and hours carry format/range descriptions in the schema, while notes and entryId are undocumented anywhere. The description enumerates the same three mutable fields the schema already names, so it adds marginal semantic value beyond the structured data.

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) plus the exact resource and the fields affected (date, hours, notes) on the caller's own timesheet entry. The state constraint ('DRAFT or REJECTED') implicitly separates it from submit_timesheet, approve_timesheet_entry, and reject_timesheet_entry without needing to name them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly gives the when (DRAFT or REJECTED entries) and the when-not (SUBMITTED and APPROVED entries must be returned first), including the required remedy. It stops short of naming the specific sibling tool that performs the return/withdraw step, so the agent still has to infer the next call.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_whiteboardA
DestructiveIdempotent
Inspect

Update whiteboard name / description / elements (Excalidraw scene) / appState. A scene change (elements/appState) bumps version; a metadata-only edit does not. Pass description=null to clear. Plan gate: whiteboards (PRO+).

NameRequiredDescriptionDefault
nameNo
appStateNo
elementsNo
descriptionNo
whiteboardIdYes

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare non-readOnly, idempotent, and destructive. The description adds genuinely new behavior: scene changes (elements/appState) bump version while metadata edits do not, plus pass description=null to clear. These go beyond what annotations convey, though it does not detail what is lost when elements are overwritten despite 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight, front-loaded sentences with no filler, each conveying distinct information (updatable fields, version semantics, null clearing, plan gate). Density is high but appropriate.

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-param mutation with 0% schema coverage and no output schema, the description covers the important behavioral traits (version bump, null clearing, plan gate) but omits what happens to omitted fields, the return shape, and the meaning of whiteboardId, leaving 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 coverage is 0%, so the description carries the burden. It adds meaning for name, description (null clears), elements (Excalidraw scene), and appState, but leaves whiteboardId and appState semantics undocumented, so it only partially compensates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (update) and resource (whiteboard) and enumerates the exact updatable aspects: name, description, elements (Excalidraw scene), and appState. The agent can clearly tell this is a mutation tool distinct from create_whiteboard/get_whiteboard, 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?

The distinction between scene edits and metadata edits usefully signals different use cases, and the plan gate (PRO+) is stated. However there is no explicit when-to-use vs alternative guidance nor any when-not condition; usage is only implied from the field list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_wiki_pageA
DestructiveIdempotent
Inspect

Update wiki page metadata: rename (title), change icon (emoji), or move under a different parent page (parentId). Does NOT edit the document body, only tree metadata. Requires wikis (PRO+) and write access to the parent project. Wiki has been retired in favour of Pages: while it is retired existing wiki pages are read-only, and this tool changes nothing and returns an error naming update_page.

NameRequiredDescriptionDefault
iconNoNew emoji icon (max 8 chars) or null to clear.
titleNoNew title, 1-200 chars.
pageIdYesId of the wiki page to update.
parentIdNoNew parent page id, or null to promote to root.

TDQS

A4.7/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 decisive runtime behavior: this retired tool 'changes nothing and returns an error naming update_page,' plus the PRO+ entitlement and write-access requirement. That is exactly the kind of context an agent needs to avoid a wasted, always-failing call; the annotations alone (destructiveHint/idempotentHint) would not reveal 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?

Four short sentences, front-loaded with what changes and immediately followed by what does not, then prerequisites, then the deprecation warning. 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.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a retired, always-erroring metadata tool with no output schema, the description covers everything needed: editable fields, scope limit (body excluded), prerequisites, and the error/redirect outcome. Nothing an agent must know to decide whether to call it is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents each parameter (title 1-200 chars, icon max 8 chars or null to clear, parentId null to promote to root). The description only restates the field-to-action mapping (title=rename, icon=emoji, parentId=move) and omits the required pageId, so it adds little 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?

States a specific verb+resource (update wiki page metadata) and then bounds the scope precisely: 'Does NOT edit the document body, only tree metadata.' It names the three editable fields and their actions (rename/title, icon/emoji, move/parentId), so an agent can distinguish it from update_page, update_document_content, or move_task_to_epic without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when not to use it and what to use instead: the Wiki feature is retired in favour of Pages, existing wiki pages are read-only, and the tool 'returns an error naming update_page.' It also gives the prerequisites ('Requires wikis (PRO+) and write access to the parent project'). This is a textbook when/when-not/alternative statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_workspace_rowA
DestructiveIdempotent
Inspect

Update cells on a workspace row. cells is a partial map of columnId -> value (string|number|boolean|null). Specified columns upsert; unspecified stay unchanged. Optional order reorders the row.

NameRequiredDescriptionDefault
cellsNo
orderNo
rowIdYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=false, idempotent=true, destructive=true, and openWorld=false. The description adds useful behavioral detail beyond those hints: `cells` is a partial map, specified columns upsert, unspecified columns remain unchanged, and `order` reorders the row.

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, front-loaded with the core action. Every sentence adds concrete information about update behavior 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 no output schema and annotations covering safety/idempotency, the description is nearly complete. It covers partial updates and ordering, but does not mention error behavior, permissions, or whether unspecified `cells` truly means untouched values are preserved at the API level beyond the stated assurance.

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 0%, so the description carries the burden and does well for `cells` and `order`. It explains the partial-map and upsert semantics for `cells`, and the reordering behavior for `order`; `rowId` is implied by the tool context but not separately described.

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 cells on a workspace row. It also identifies the supported fields (`cells`, `order`) and distinguishes the operation from create/list siblings by focusing on partial updates to an existing row.

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 update context is implied clearly by the name and description, but there is no explicit guidance about when to use this tool versus alternatives such as `bulk_create_workspace_rows` or `create_workspace_row`. No exclusions or prerequisites are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upload_library_documentAInspect

Upload an existing file (PDF, Word/Excel/PowerPoint, an existing markdown/text/CSV file, or an image) into a project, proposal, or organization (tenant-level) document library from base64 content. Provide libraryId (create one first via create_library if needed), fileName incl. extension, mimeType, and contentBase64. Max 25 MB decoded. The bytes are magic-byte verified against the claimed mimeType (spoofed or disallowed types are rejected) and a WorkspaceDocument row is created exactly like a human upload. Use draft_document instead when you want to author markdown directly from a string. Requires project.content.create on the parent project (Viewers are read-only); for proposal libraries, a governance reviewer or the proposal submitter; for organization libraries, org.library.contribute (MEMBER+ by default).

NameRequiredDescriptionDefault
nameNoOptional display name for the document. Defaults to fileName.
fileNameYesOriginal file name incl. extension, e.g. "spec.pdf".
mimeTypeYesMIME type, e.g. "application/pdf", "image/png", "text/markdown".
libraryIdYesThe document library to upload into.
contentBase64YesBase64-encoded file bytes. Max 25 MB decoded.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the safety profile (readOnly=false, destructive=false, idempotent=false). The description adds substantial behavioral context beyond that: the 25 MB decoded limit, magic-byte verification against the claimed mimeType with rejection of spoofed types, and the fact that a WorkspaceDocument row is created exactly like a human upload.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense and front-loaded: purpose, then required inputs, then behavioral constraints, then the alternative and permissions. Every clause earns its place, though the long parenthetical permission sentence is heavy and slightly harder to parse.

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 write tool with no output schema, the description covers everything an agent needs: supported formats, size limit, verification behavior, permission requirements per library scope, prerequisite tool, and the sibling alternative. Nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description goes slightly beyond the schema by indicating where libraryId comes from (create_library) and restating the byte limit and extension requirement for fileName, but most parameter meaning is already 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 (upload) and resource (document into a project/proposal/org library), enumerates the accepted file types, and explicitly distinguishes itself from draft_document. An agent can identify this tool 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 Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the alternative ('Use draft_document instead when you want to author markdown directly from a string') and the prerequisite ('create one first via create_library if needed'). It also spells out which permission is needed per library type, so the agent knows when the call will succeed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upload_task_attachmentAInspect

Attach a file to a task from base64 content (fileName + mimeType + contentBase64). Max 25 MB. Any project contributor or above can attach (VIEWERs cannot). The file is stored and a TaskAttachment row is created, exactly like a human upload. For integrity, ALSO pass sizeBytes (raw byte length) and/or sha256 (hex of the raw bytes): the tool then REJECTS a truncated or garbled upload instead of silently storing a corrupt file. Strongly recommended for binaries (docx/xlsx/pdf/png), where base64 sent through the model can truncate.

NameRequiredDescriptionDefault
sha256NoOptional but recommended: SHA-256 of the RAW file bytes, 64-char hex. Rejected if the decoded bytes do not match (catches truncated/garbled base64).
taskIdYesThe task to attach to.
fileNameYesOriginal file name incl. extension, e.g. "chart.png".
mimeTypeYesMIME type, e.g. "image/png", "text/csv", "application/pdf".
sizeBytesNoOptional but recommended: exact byte length of the RAW file. Rejected if the decoded length differs (catches truncation).
contentBase64YesBase64-encoded file bytes. Max 25 MB decoded.
idempotencyKeyNoOptional idempotency key. Pass a stable unique value (e.g. a UUID) to make this create safe to retry: calling again with the same key within 24h - even from a new session after a reconnect - replays the original result and creates no duplicate. Org-scoped; works across conversations.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by disclosing the 25 MB cap, the minimum permission tier (contributor or above; VIEWERs cannot), that storage mirrors a human upload and creates a TaskAttachment row, and that truncated/garbled base64 is actively REJECTED rather than silently stored. This is exactly the extra behavioral context annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action and limits first, then layers permissions, storage semantics, and the integrity recommendation. Every clause carries information, though the integrity guidance is slightly repetitive across description and 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 mutation tool with no output schema, the description is essentially complete: permissions, size limits, side effects, retry semantics (via the idempotencyKey param), and failure modes are all covered. Only the exact returned identity/format is unstated, which 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 an extra point by explaining the *purpose* of the optional sizeBytes/sha256 params (integrity enforcement, truncation detection) rather than just restating them, which adds rationale the schema field text alone does not fully convey.

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 (attach a file to a task) plus the exact mechanism (base64 content with fileName + mimeType + contentBase64). The phrase 'from base64 content' implicitly distinguishes it from URL/SharePoint-based siblings, though no sibling is named directly.

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?

Clear context for use plus a concrete 'strongly recommended' when-to-do-more instruction (pass sizeBytes/sha256 for binaries). It does not explicitly route the agent to alternatives like attach_file_from_url or attach_link when those would be preferable, 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.

weekly_complianceA
Read-onlyIdempotent
Inspect

Per-user timesheet compliance + cost-at-risk for one week (YYYY-MM-DD). Approver-only. Plan gate: timeTracking (PRO+). Drives the Compliance sub-tab on the Approvals inbox; agents use it for the "who is behind on hours?" rollup.

NameRequiredDescriptionDefault
weekStartYesYYYY-MM-DD (Monday of the target week).

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly, idempotent, non-destructive, closed-world behavior, so the description's added value is the access model: approver-only, gated behind the timeTracking (PRO+) feature, and tied to a specific UI surface. It does not describe output shape or any computation caveats around cost-at-risk.

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 filler, with the core scope front-loaded ahead of permissions and usage context. Every clause 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 read-only, single-parameter rollup with full annotations and no output schema, the description covers purpose, caller restrictions, and plan gating. Only the shape of the returned rollup (per-user rows, what cost-at-risk measures) is left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter and schema description coverage is 100%, so the schema already documents weekStart fully. The description repeats the YYYY-MM-DD format but omits the schema's 'Monday of the target week' constraint, adding essentially nothing beyond the structured field.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource and scope: per-user timesheet compliance plus cost-at-risk, for a single week. An agent can tell it is a rollup rather than an entry-level tool, but it never names or contrasts with near siblings such as week_status, list_compliance_exceptions, or revenue_at_risk.

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 (approver-only, timeTracking plan gate PRO+) and a usage framing (the 'who is behind on hours?' rollup for the Approvals inbox). It stops short of explicit when-not-to-use guidance or pointing to an alternative tool for adjacent questions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

week_statusA
Read-onlyIdempotent
Inspect

Per-user timesheet submission state for one week (YYYY-MM-DD). Approver-only (managers-mode: OWNER/ADMIN/MANAGER; approvers-mode: explicit approver list). Returns rows + a KPI summary for the Approvals inbox. GUESTs excluded.

NameRequiredDescriptionDefault
weekStartYesYYYY-MM-DD (Monday of the target week).

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 safety bar is met. The description adds genuinely useful behavior beyond that: the authorization model (managers-mode OWNER/ADMIN/MANAGER vs approvers-mode explicit list), GUEST exclusion, and the return shape (rows plus KPI summary for the Approvals inbox).

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-loaded with the purpose before the parenthetical auth constraints. Dense with parentheticals but no wasted sentences; each clause carries a constraint.

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-param read tool with full annotation coverage, the definition supplies what's needed: authorization gating, week semantics, and a sketch of the return payload. No output schema exists, but the description partially covers what comes back, so the gap is minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the single parameter is fully documented in the schema. The description restates the YYYY-MM-DD format and Monday-of-week semantics rather than adding new meaning. 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+scope: 'Per-user timesheet submission state for one week'. An agent knows exactly what it retrieves. It does not, however, differentiate itself from the very similar sibling weekly_compliance, so the reader must infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives real usage context (approver-only, mode-specific role gating, GUESTs excluded), which tells the agent whether it is even allowed to call it. But it names no alternative and no condition for choosing this over weekly_compliance or list_timesheet_entries, so the sibling boundary is left implicit.

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

Self-introspection. Returns the calling agent's identity (id, name, email, isAgentPersona, agentProvider when persona), the org context (id, name, slug, plan tier, caller's org role), the effective feature gates for the org, the PAT scope context when called via MCP, and the conversation id, plus a human-first youAre summary. When a human asks who they are, youAre is the field that answers it: it leads with the human and names the agent only as the channel, whereas the persona name identifies the agent rather than the person. Grounding a session on this first is what stops subsequent tool calls trial-and-erroring 401/402. Cheap (a few small DB reads). Its companions are describe_capabilities for the tool surface and describe_schema for entity field shapes.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/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 still adds real value beyond them: it discloses the cost profile ('Cheap, a few small DB reads'), the error-prevention benefit against 401/402, the PAT-scope context behavior when called via MCP, and the semantic distinction between youAre and persona name.

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 and the returned data, then the youAre clarification, then the usage rationale. It is longer than strictly minimal and the youAre sentence is dense, but each sentence contributes routable value 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?

There is no output schema, so the description carries the full burden of describing return values, and it does so field-by-field (identity, org context, feature gates, PAT scope, conversation id, youAre). Nothing an agent needs to interpret the result or decide to call this first 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?

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The field-level detail it provides describes return values rather than inputs, which 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 ('Self-introspection. Returns the calling agent's identity...') and enumerates exactly what the response contains. It explicitly distinguishes itself from its siblings by naming describe_capabilities (tool surface) and describe_schema (entity shapes), so an agent can route between them without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear when-to-use guidance: 'Grounding a session on this first is what stops subsequent tool calls trial-and-erroring 401/402,' and directs persona/identity questions to the youAre field. It names the companion tools but stops short of stating an explicit when-NOT-to-use condition, keeping it just shy of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

withdraw_change_requestA
DestructiveIdempotent
Inspect

Withdraw a DRAFT, SUBMITTED, or UNDER_REVIEW change request. Only the requester or a project PM can withdraw. Feature: changeControl (ENTERPRISE+).

NameRequiredDescriptionDefault
changeRequestIdYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare non-read-only, destructive, idempotent, closed-world, so the safety profile is covered. The description adds real value beyond that: eligibility by status, required role, and an ENTERPRISE+ feature gate. It omits what the CR's resulting status is and whether the action is 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 short sentences, each carrying distinct information: action + valid states, authorization rule, feature gate. Front-loaded with the action; nothing wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter mutation with no output schema, the description covers the essentials an agent needs before calling: valid states, permission requirements, and licensing. The main gap is the post-withdrawal state/error behavior for ineligible statuses.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter with 0% schema description coverage, and the description supplies no detail about changeRequestId (format, where to obtain it). The name is largely self-explanatory, so this is minimally adequate rather than deficient.

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 ('Withdraw') and resource ('change request') and narrows scope to three eligible states (DRAFT, SUBMITTED, UNDER_REVIEW). This lets an agent distinguish it from submit_change_request, implement_change_request, and get_change_request 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 preconditions (only these three statuses) and authorization context (requester or project PM). It does not point to an alternative for the cases it excludes (e.g., what to do with an already-approved CR), so it stops short of explicit when-not/alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

workflow_statsA
Read-onlyIdempotent
Inspect

Workflow counters: total and active workflows in the org, and of the runs the caller can see, the total and those that FAILED in the last 7 days. Used by the dashboard widget. PREFER list_workflows / list_workflow_runs for filtering. Plan gate: automations (PRO+).

NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false. The description adds value beyond those by disclosing the visibility scoping (org totals vs only the runs the caller can see) and the 7-day failure window, which materially affects how results should be interpreted. It stops short of describing response shape or refresh/freshness 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?

Three sentences, no filler, and the most important content (what is counted, including the 7-day failure window) is front-loaded. The routing hint and plan gate follow in order of decreasing importance.

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 input parameters and no output schema, the description must carry the full burden of saying what comes back, and it does: total/active workflow counts plus total and failed run counts over a stated window. It also discloses the consumer (dashboard widget) and the plan prerequisite, leaving no obvious gap for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so per the rubric the baseline is 4. There is nothing for the description to clarify beyond confirming the counters are not filterable, which it effectively does by directing filtering to sibling tools.

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 specifies exactly what is counted: org-wide total and active workflows, plus caller-visible run totals and failures over the last 7 days. That is a specific verb+resource statement ('workflow counters') with explicit scope qualifiers, and it is clearly distinct from list_workflows/list_workflow_runs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It names the alternative tools explicitly ('PREFER `list_workflows` / `list_workflow_runs` for filtering') and states the condition that selects them, so the negative case is unambiguous. It also discloses the plan gate (automations PRO+), which is a real usage prerequisite an agent must check before calling.

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. 3 tool updates
    • Addedinsert_subproject
    • Addedlist_subprojects
    • Addedunlink_subproject
  2. 1 tool update
    • Changeddismiss_risk2 fields changed
      • addedInput schema / properties / note
        Added value: +{
        +  "description": "Why, in a few words. Required when reason is OTHER.",
        +  "maxLength": 1000,
        +  "type": "string"
        +}
      • addedInput schema / properties / reason
        Added value: +{
        +  "description": "Why it is dismissed.",
        +  "enum": [
        +    "MITIGATED",
        +    "NOT_RELEVANT",
        +    "DUPLICATE",
        +    "OTHER"
        +  ],
        +  "type": "string"
        +}
  3. 1 tool update
    • Changedcreate_change_request1 field changed
      • addedInput schema / properties / sourceTaskId
        Added value: +{
        +  "description": "Optional. The task this change is raised from, a task in the same project. The task shows the request among what is connected to it.",
        +  "type": "string"
        +}
  4. 4 tool updates
    • Addedcreate_cost_line
    • Addedget_cost_line_history
    • Addedlist_cost_lines
    • Addedupdate_cost_line
  5. 3 tool updates
    • Changedcompose_evm_narrative1 field changed
      • addedInput schema / properties / locale
        Added value: +{
        +  "description": "Optional. The language to write in, as an app language code: en, es, pt-BR, fr, ar, zh-CN, ja, de or it. Anything else, or nothing, is English.",
        +  "type": "string"
        +}
    • Changedcompose_status_digest1 field changed
      • addedInput schema / properties / locale
        Added value: +{
        +  "description": "Optional. The language to write in, as an app language code: en, es, pt-BR, fr, ar, zh-CN, ja, de or it. Anything else, or nothing, is English.",
        +  "type": "string"
        +}
    • Changedgenerate_status_report1 field changed
      • addedInput schema / properties / locale
        Added value: +{
        +  "description": "Optional. The language to write in, as an app language code: en, es, pt-BR, fr, ar, zh-CN, ja, de or it. Anything else, or nothing, is English.",
        +  "type": "string"
        +}
  6. 2 tool updates
    • Changedlist_projects3 fields changed
      • changedInput schema / properties / customFields / description
        Previous value: -"Filter by custom-field value(s); multiple entries are ANDed. Each entry is { fieldId, op, value? }. Ops must be valid for the field type , numeric (NUMBER/CURRENCY/RATING): eq/gt/gte/lt/lte/isNotEmpty; DATE: eq/before/after/isNotEmpty; text/DROPDOWN: eq/contains/isNotEmpty; MULTI_SELECT: contains/isNotEmpty; CHECKBOX: eq/isNotEmpty. Omit value only for isNotEmpty. Inclusion-only in v1 (no neq / isEmpty). Get field ids from list_custom_field_defs."New value: +"Filter by custom-field value(s); multiple entries are ANDed. Each entry is { fieldId, op, value? }. Ops must be valid for the field type , numeric (NUMBER/CURRENCY/RATING): eq/gt/gte/lt/lte/isNotEmpty; DATE: eq/before/after/isNotEmpty; text/DROPDOWN: eq/contains/isNotEmpty; MULTI_SELECT: contains/isNotEmpty; CHECKBOX: isChecked/isUnchecked (unchecked includes never set). Omit value for isNotEmpty, isChecked and isUnchecked. No neq / isEmpty. Get field ids from list_custom_field_defs."
      • changedInput schema / properties / customFields / items / properties / op / enum
        Previous value: -[
        -  "eq",
        -  "contains",
        -  "gt",
        -  "gte",
        -  "lt",
        -  "lte",
        -  "before",
        -  "after",
        -  "isNotEmpty"
        -]New value: +[
        +  "eq",
        +  "contains",
        +  "gt",
        +  "gte",
        +  "lt",
        +  "lte",
        +  "before",
        +  "after",
        +  "isNotEmpty",
        +  "isChecked",
        +  "isUnchecked"
        +]
      • changedInput schema / properties / customFields / items / properties / value / description
        Previous value: -"Comparison value; omit for isNotEmpty."New value: +"Comparison value; omit for isNotEmpty, isChecked and isUnchecked."
    • Changedlist_tasks3 fields changed
      • changedInput schema / properties / customFields / description
        Previous value: -"Filter by custom-field value(s); multiple entries are ANDed. Each entry is { fieldId, op, value? }. Ops must be valid for the field type , numeric (NUMBER/CURRENCY/RATING): eq/gt/gte/lt/lte/isNotEmpty; DATE: eq/before/after/isNotEmpty; text/DROPDOWN: eq/contains/isNotEmpty; MULTI_SELECT: contains/isNotEmpty; CHECKBOX: eq/isNotEmpty. Omit value only for isNotEmpty. Inclusion-only in v1 (no neq / isEmpty). Get field ids from list_custom_field_defs."New value: +"Filter by custom-field value(s); multiple entries are ANDed. Each entry is { fieldId, op, value? }. Ops must be valid for the field type , numeric (NUMBER/CURRENCY/RATING): eq/gt/gte/lt/lte/isNotEmpty; DATE: eq/before/after/isNotEmpty; text/DROPDOWN: eq/contains/isNotEmpty; MULTI_SELECT: contains/isNotEmpty; CHECKBOX: isChecked/isUnchecked (unchecked includes never set). Omit value for isNotEmpty, isChecked and isUnchecked. No neq / isEmpty. Get field ids from list_custom_field_defs."
      • changedInput schema / properties / customFields / items / properties / op / enum
        Previous value: -[
        -  "eq",
        -  "contains",
        -  "gt",
        -  "gte",
        -  "lt",
        -  "lte",
        -  "before",
        -  "after",
        -  "isNotEmpty"
        -]New value: +[
        +  "eq",
        +  "contains",
        +  "gt",
        +  "gte",
        +  "lt",
        +  "lte",
        +  "before",
        +  "after",
        +  "isNotEmpty",
        +  "isChecked",
        +  "isUnchecked"
        +]
      • changedInput schema / properties / customFields / items / properties / value / description
        Previous value: -"Comparison value; omit for isNotEmpty."New value: +"Comparison value; omit for isNotEmpty, isChecked and isUnchecked."
  7. 1 tool update
    • Changedupdate_project1 field changed
      • addedInput schema / properties / retainedLogic
        Added value: +{
        +  "description": "How a started task meets its links. true (retained logic): its remaining work waits on its incoming links, so a late predecessor pushes it. false (the default): it holds at its actual start. Takes effect on the next reschedule, and only while the server switch retained_logic_enabled is on.",
        +  "type": "boolean"
        +}
  8. 1 tool update
    • Addedinvite_member
  9. 95 tool updates
    • Changedadd_project_member1 field changed
      • changedInput schema / properties / role / enum
        Previous value: -[
        -  "OWNER",
        -  "MANAGER",
        -  "MEMBER",
        -  "CONTRIBUTOR",
        -  "VIEWER"
        -]New value: +[
        +  "MANAGER",
        +  "MEMBER",
        +  "CONTRIBUTOR",
        +  "VIEWER"
        +]
    • Addedarchive_project
    • Addedattach_file_from_url
    • Addedauto_schedule_proposal
    • Changedbulk_create_tasks4 fields changed
      • changedInput schema / properties / tasks / description
        Previous value: -"1-50 tasks. Each needs a title; optional description / status / priority / estimatedHours / startDate / dueDate (YYYY-MM-DD) / isMilestone."New value: +"1-50 tasks. Each needs a title; optional description / status / priority / estimatedHours / startDate / dueDate (YYYY-MM-DD) / isMilestone / recurringRule / collaborators."
      • addedInput schema / properties / tasks / items / properties / collaborators
        Added value: +{
        +  "description": "People who work on this task, by user id, name or email. Added after the batch is created; anyone who cannot be added is reported in warnings.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / tasks / items / properties / priority / description
        Added value: +"Priority label (LOW/MEDIUM/HIGH/CRITICAL) that people set to rank work. It is not the critical path: the schedule engine computes that from dependencies, durations and the calendar, and priority does not change it."
      • addedInput schema / properties / tasks / items / properties / recurringRule
        Added value: +{
        +  "description": "Make this task recurring: { freq: daily|weekly|monthly, interval: int>=1, endDate?: ISO|null }. Set dueDate too so the worker can spawn the next occurrence.",
        +  "properties": {
        +    "endDate": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "freq": {
        +      "enum": [
        +        "daily",
        +        "weekly",
        +        "monthly"
        +      ],
        +      "type": "string"
        +    },
        +    "interval": {
        +      "type": "number"
        +    }
        +  },
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
    • Addedbulk_create_workspace_rows
    • Changedbulk_update_tasks1 field changed
      • addedInput schema / properties / priority / description
        Added value: +"Priority label (LOW/MEDIUM/HIGH/CRITICAL) that people set to rank work. It is not the critical path: the schedule engine computes that from dependencies, durations and the calendar, and priority does not change it."
    • Addedclaim_task
    • Addedcompare_baseline
    • Addedcompose_evm_narrative
    • Addedcompose_meeting_brief
    • Changedcompose_meeting_invite1 field changed
      • addedInput schema / properties / attendees / description
        Added value: +"Proposed attendees (email addresses). Listed in the event body, not invited."
    • Addedcompose_release_notes
    • Addedcompose_status_digest
    • Changedcreate_change_request1 field changed
      • addedInput schema / properties / dealId
        Added value: +{
        +  "description": "Optional. The deal this change renegotiates, so the budget impact can be read against what was sold.",
        +  "type": "string"
        +}
    • Changedcreate_comment4 fields changed
      • addedInput schema / properties / companyId
        Added value: +{
        +  "description": "Comment on a client company (Onplana Services). Exactly one of taskId/projectId/issueId/companyId.",
        +  "type": "string"
        +}
      • changedInput schema / properties / content / description
        Previous value: -"1-5000 chars."New value: +"1-5000 chars. Plain text is formatted: blank lines separate paragraphs, lines starting \"- \" or \"* \" become a bulleted list, lines starting \"1. \" a numbered list."
      • changedInput schema / properties / issueId / description
        Previous value: -"Comment on an Issue (Issue Log). Exactly one of taskId/projectId/issueId."New value: +"Comment on an Issue (Issue Log). Exactly one of taskId/projectId/issueId/companyId."
      • addedInput schema / properties / threadKind
        Added value: +{
        +  "description": "Task comments only. 'AGENT' = the focused human-agent thread ([Agent] tab); 'general' = the team thread ([Comments] tab). Defaults to the team thread; set 'AGENT' only to reply in the focused human-agent thread.",
        +  "enum": [
        +    "AGENT",
        +    "general"
        +  ],
        +  "type": "string"
        +}
    • Addedcreate_idea
    • Changedcreate_issue3 fields changed
      • addedInput schema / properties / companyId
        Added value: +{
        +  "description": "Optional. The client who reported this, when a client did. Omit for internally-found issues.",
        +  "type": "string"
        +}
      • changedInput schema / properties / projectId / description
        Previous value: -"Project the issue belongs to."New value: +"Optional. The project the issue belongs to; omit for an org-level (General) issue."
      • changedInput schema / required
        Previous value: -[
        -  "projectId",
        -  "title",
        -  "type",
        -  "severity"
        -]New value: +[
        +  "title",
        +  "type",
        +  "severity"
        +]
    • Changedcreate_library1 field changed
      • addedInput schema / properties / scope
        Added value: +{
        +  "description": "Set \"org\" for a tenant-level library (the caller's organization).",
        +  "enum": [
        +    "org"
        +  ],
        +  "type": "string"
        +}
    • Addedcreate_office_document
    • Addedcreate_page
    • Changedcreate_project4 fields changed
      • changedInput schema / properties / endDate / description
        Previous value: -"ISO 8601 end date (required, must be after startDate)."New value: +"Optional ISO 8601 end date (YYYY-MM-DD). Defaults to ~90 days after the start when omitted; when both are given it must be after startDate."
      • changedInput schema / properties / startDate / description
        Previous value: -"ISO 8601 start date (required)."New value: +"Optional ISO 8601 start date (YYYY-MM-DD). Defaults to today when omitted."
      • changedInput schema / properties / type / description
        Previous value: -"STRATEGIC or OPERATIONAL."New value: +"STRATEGIC or OPERATIONAL. STRATEGIC is refused in an organization that classifies its projects, where a strategic project starts as a proposal."
      • changedInput schema / required
        Previous value: -[
        -  "name",
        -  "startDate",
        -  "endDate"
        -]New value: +[
        +  "name"
        +]
    • Addedcreate_risk
    • Changedcreate_task3 fields changed
      • addedInput schema / properties / collaborators
        Added value: +{
        +  "description": "People who work on the task besides its assignee, by user id, name or email. They see it in My Work and may update it but not reassign it. Added after the task is created; anyone who cannot be added is reported in warnings.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / priority / description
        Previous value: -"Default MEDIUM."New value: +"Priority label (LOW/MEDIUM/HIGH/CRITICAL) that people set to rank work. It is not the critical path: the schedule engine computes that from dependencies, durations and the calendar, and priority does not change it. Default MEDIUM."
      • addedInput schema / properties / recurringRule
        Added value: +{
        +  "description": "Make the task recurring: { freq: daily|weekly|monthly, interval: int>=1, endDate?: ISO|null }. Omit (or null) for a one-off task. The recurringWorker spawns the next occurrence from the due/start date, so set dueDate (or startDate) too.",
        +  "properties": {
        +    "endDate": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "freq": {
        +      "enum": [
        +        "daily",
        +        "weekly",
        +        "monthly"
        +      ],
        +      "type": "string"
        +    },
        +    "interval": {
        +      "type": "number"
        +    }
        +  },
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
    • Changedcreate_workspace_table1 field changed
      • addedInput schema / properties / scope
        Added value: +{
        +  "description": "Set \"org\" for a tenant-level list (the caller's organization).",
        +  "enum": [
        +    "org"
        +  ],
        +  "type": "string"
        +}
    • Addeddecide_closeout_signoff
    • Addeddelete_document
    • Addeddelete_project
    • Addeddelete_task
    • Addeddelete_workspace_table
    • Addeddesign_page_draft
    • Addeddesign_workflow_draft
    • Addedduplicate_project
    • Changededit_comment1 field changed
      • changedInput schema / properties / content / description
        Previous value: -"Replacement content, 1-10000 chars."New value: +"Replacement content, 1-10000 chars. Plain text is formatted as in create_comment: blank lines separate paragraphs, \"- \" and \"1. \" lines become lists."
    • Addedevidence_export
    • Changedgantt_optimize2 fields changed
      • addedInput schema / properties / mode
        Added value: +{
        +  "default": "preview",
        +  "description": "preview (default): return proposals without writing. apply: capture a baseline then commit all proposed dates. Requires project Owner or Manager role.",
        +  "enum": [
        +    "preview",
        +    "apply"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / previewId
        Added value: +{
        +  "description": "The previewId a preview of this project returned. When a preview returns one, apply mode writes exactly that stored preview instead of proposing again, and refuses without it or when the plan changed since.",
        +  "type": "string"
        +}
    • Addedget_agent_skill
    • Addedget_closeout_status
    • Addedget_idea
    • Addedget_page
    • Addedget_readiness_status
    • Addedget_schedule_risk
    • Addedimport_sharepoint_list_projects
    • Addedinitiate_closeout
    • Changedinstantiate_plan3 fields changed
      • addedInput schema / properties / plan / properties / tasks / items / properties / collaborators
        Added value: +{
        +  "description": "People who work on this task besides its assignee, by user id, name or email. Added after the plan is built; anyone who cannot be added is reported in warnings.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / projectId
        Added value: +{
        +  "description": "Optional. Add this plan to an EXISTING project instead of creating one. Use it whenever the project is already there, including one you just created. Appends only: the project keeps its name, owner, description and existing task dates.",
        +  "type": "string"
        +}
      • changedInput schema / properties / projectName / description
        Previous value: -"Optional override for the auto-derived name."New value: +"Optional override for the auto-derived name. Ignored when projectId is set, an existing project keeps its own name."
    • Changedlink_dependency2 fields changed
      • changedInput schema / properties / lag / description
        Previous value: -"Integer days. Default 0. Negative for lead time."New value: +"Lag amount in lagUnit. Default 0. Negative for lead time."
      • addedInput schema / properties / lagUnit
        Added value: +{
        +  "description": "Unit for lag: days (default), hours, or minutes.",
        +  "enum": [
        +    "days",
        +    "hours",
        +    "minutes"
        +  ],
        +  "type": "string"
        +}
    • Addedlink_planner_plans
    • Changedlist_comments1 field changed
      • addedInput schema / properties / companyId
        Added value: +{
        +  "description": "Limit to a client company (Onplana Services)",
        +  "type": "string"
        +}
    • Changedlist_dependencies2 fields changed
      • addedInput schema / properties / projectId / description
        Added value: +"All dependencies in this project. Required unless taskId is given."
      • addedInput schema / properties / taskId / description
        Added value: +"Dependencies where this task is the predecessor or the successor. Required unless projectId is given."
    • Addedlist_document_versions
    • Changedlist_documents2 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Last document id from the previous page (nextCursor).",
        +  "type": "string"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "description": "Default 100, max 500.",
        +  "type": "number"
        +}
    • Addedlist_escalations
    • Addedlist_ideas
    • Addedlist_issue_attachments
    • Changedlist_libraries1 field changed
      • addedInput schema / properties / scope
        Added value: +{
        +  "description": "Set \"org\" for the tenant-level (organization) libraries",
        +  "enum": [
        +    "org"
        +  ],
        +  "type": "string"
        +}
    • Changedlist_my_tasks1 field changed
      • addedInput schema / properties / scope
        Added value: +{
        +  "description": "\"assigned\" (default): tasks you hold or collaborate on. \"managed\": every task in the projects you manage.",
        +  "enum": [
        +    "assigned",
        +    "managed"
        +  ],
        +  "type": "string"
        +}
    • Changedlist_overdue1 field changed
      • changedInput schema / properties / projectId / description
        Previous value: -"Optional — narrow to one project."New value: +"Optional - narrow to one project."
    • Addedlist_pages
    • Addedlist_portfolios
    • Changedlist_projects5 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Last-id pagination cursor from a prior call's nextCursor.",
        +  "type": "string"
        +}
      • addedInput schema / properties / customFields
        Added value: +{
        +  "description": "Filter by custom-field value(s); multiple entries are ANDed. Each entry is { fieldId, op, value? }. Ops must be valid for the field type , numeric (NUMBER/CURRENCY/RATING): eq/gt/gte/lt/lte/isNotEmpty; DATE: eq/before/after/isNotEmpty; text/DROPDOWN: eq/contains/isNotEmpty; MULTI_SELECT: contains/isNotEmpty; CHECKBOX: eq/isNotEmpty. Omit value only for isNotEmpty. Inclusion-only in v1 (no neq / isEmpty). Get field ids from list_custom_field_defs.",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "fieldId": {
        +        "description": "CustomFieldDefinition id (scoped to this org + entity).",
        +        "type": "string"
        +      },
        +      "op": {
        +        "enum": [
        +          "eq",
        +          "contains",
        +          "gt",
        +          "gte",
        +          "lt",
        +          "lte",
        +          "before",
        +          "after",
        +          "isNotEmpty"
        +        ],
        +        "type": "string"
        +      },
        +      "value": {
        +        "description": "Comparison value; omit for isNotEmpty.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "fieldId",
        +      "op"
        +    ],
        +    "type": "object"
        +  },
        +  "maxItems": 20,
        +  "type": "array"
        +}
      • addedInput schema / properties / includeArchived
        Added value: +{
        +  "description": "Also list archived (read-only) projects. Default false.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / limit / description
        Previous value: -"Max projects to return (1–50). Default 20."New value: +"Max projects to return per page (1-50). Default 20. Use cursor to page further."
      • addedInput schema / properties / search
        Added value: +{
        +  "description": "Case-insensitive substring match on the project name. Use this to look a project up by name instead of paging the whole org.",
        +  "type": "string"
        +}
    • Addedlist_readiness_criteria
    • Changedlist_risks1 field changed
      • changedInput schema / properties / category / enum
        Previous value: -[
        -  "SCHEDULE",
        -  "RESOURCE",
        -  "BUDGET",
        -  "SCOPE"
        -]New value: +[
        +  "SCHEDULE",
        +  "RESOURCE",
        +  "BUDGET",
        +  "SCOPE",
        +  "EXTERNAL"
        +]
    • Changedlist_tasks2 fields changed
      • addedInput schema / properties / collaboratorId
        Added value: +{
        +  "description": "Only tasks this user collaborates on (works on without holding). Special value: 'me' (the caller).",
        +  "type": "string"
        +}
      • addedInput schema / properties / customFields
        Added value: +{
        +  "description": "Filter by custom-field value(s); multiple entries are ANDed. Each entry is { fieldId, op, value? }. Ops must be valid for the field type , numeric (NUMBER/CURRENCY/RATING): eq/gt/gte/lt/lte/isNotEmpty; DATE: eq/before/after/isNotEmpty; text/DROPDOWN: eq/contains/isNotEmpty; MULTI_SELECT: contains/isNotEmpty; CHECKBOX: eq/isNotEmpty. Omit value only for isNotEmpty. Inclusion-only in v1 (no neq / isEmpty). Get field ids from list_custom_field_defs.",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "fieldId": {
        +        "description": "CustomFieldDefinition id (scoped to this org + entity).",
        +        "type": "string"
        +      },
        +      "op": {
        +        "enum": [
        +          "eq",
        +          "contains",
        +          "gt",
        +          "gte",
        +          "lt",
        +          "lte",
        +          "before",
        +          "after",
        +          "isNotEmpty"
        +        ],
        +        "type": "string"
        +      },
        +      "value": {
        +        "description": "Comparison value; omit for isNotEmpty.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "fieldId",
        +      "op"
        +    ],
        +    "type": "object"
        +  },
        +  "maxItems": 20,
        +  "type": "array"
        +}
    • Changedlist_workflows2 fields changed
      • addedInput schema / properties / entity
        Added value: +{
        +  "description": "The kind of thing entityId names. Use with entityId.",
        +  "enum": [
        +    "project",
        +    "task",
        +    "document",
        +    "library",
        +    "list"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / entityId
        Added value: +{
        +  "description": "The id of the project, task, document, library or list. Use with entity.",
        +  "type": "string"
        +}
    • Addedmove_project
    • Addednext_task
    • Addedportfolio_summary
    • Addedpreview_migration
    • Addedpromote_idea
    • Addedpublish_page
    • Addedread_issue_attachment
    • Addedrelease_task
    • Addedrenew_task_lease
    • Addedreorder_tasks
    • Changedresource_leveler_analyze1 field changed
      • addedInput schema / properties / mode
        Added value: +{
        +  "default": "preview",
        +  "description": "preview (default): return analysis without writing. apply: capture a baseline then apply all reschedule suggestions. Requires project Owner or Manager role.",
        +  "enum": [
        +    "preview",
        +    "apply"
        +  ],
        +  "type": "string"
        +}
    • Addedrestore_document_version
    • Addedrestore_page_version
    • Addedrevenue_at_risk
    • Addedrun_readiness_check
    • Addedsearch_docs
    • Changedsearch_org_knowledge2 fields changed
      • changedInput schema / properties / scope / description
        Previous value: -"Narrow to one entity type or search all (default). Use \"agentOutputs\" to recall prior AI-agent deliverables."New value: +"Narrow to one entity type or search all (default). Use \"agentOutputs\" to recall prior AI-agent deliverables. \"clients\" covers companies, contacts and deals and returns rows only for callers who can open Clients (Onplana Services, any member except a guest); \"all\" includes them for the same callers."
      • changedInput schema / properties / scope / enum
        Previous value: -[
        -  "projects",
        -  "tasks",
        -  "risks",
        -  "goals",
        -  "comments",
        -  "wiki",
        -  "agentOutputs",
        -  "issues",
        -  "all"
        -]New value: +[
        +  "projects",
        +  "tasks",
        +  "risks",
        +  "goals",
        +  "comments",
        +  "wiki",
        +  "pages",
        +  "agentOutputs",
        +  "issues",
        +  "ideas",
        +  "clients",
        +  "all"
        +]
    • Changedsend_outlook_message3 fields changed
      • removedInput schema / properties / confirm
        Removed value: -{
        -  "type": "boolean"
        -}
      • removedInput schema / properties / mode
        Removed value: -{
        -  "enum": [
        -    "draft",
        -    "send"
        -  ],
        -  "type": "string"
        -}
      • changedInput schema / properties / to / description
        Previous value: -"TO recipients (RFC 5322 addresses)."New value: +"TO recipients (RFC 5322 addresses). Optional — leave empty for the human to fill in."
    • Addedsubmit_closeout_signoff
    • Addedunarchive_project
    • Changedunlink_dependency4 fields changed
      • addedInput schema / properties / dependencyId / description
        Added value: +"TaskDependency row id from list_dependencies."
      • addedInput schema / properties / predecessorId
        Added value: +{
        +  "description": "Predecessor task id. Use WITH successorId instead of dependencyId.",
        +  "type": "string"
        +}
      • addedInput schema / properties / successorId
        Added value: +{
        +  "description": "Successor task id. Use WITH predecessorId instead of dependencyId.",
        +  "type": "string"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "dependencyId"
        -]
    • Addedupdate_closeout_lessons
    • Addedupdate_dependency
    • Addedupdate_idea
    • Changedupdate_notification_preferences9 fields changed
      • addedInput schema / properties / approvalEmails
        Added value: +{
        +  "description": "Emails for approval requests and intake form submissions.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / emailEnabled / description
        Previous value: -"Master switch for all email notifications."New value: +"Master switch for all email notifications. Overrides every per-type setting below, including the ones that are otherwise always sent."
      • addedInput schema / properties / productUpdateEmails
        Added value: +{
        +  "description": "The monthly product-update email describing what changed in Onplana.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / pushEnabled
        Added value: +{
        +  "description": "Master switch for push notifications to the mobile apps. Separate from email: turning email off does not silence the phone, and vice versa.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / riskEmails
        Added value: +{
        +  "description": "The weekly risk digest for projects the user owns or manages.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / securityEmails
        Added value: +{
        +  "description": "Occasional account-protection advice, such as turning on two-step sign-in.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / setupReminderEmails
        Added value: +{
        +  "description": "Monthly reminders about workspace setup steps that are still open, sent to owners and admins until everything is decided.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / timesheetEmails
        Added value: +{
        +  "description": "Emails for timesheet submissions, reviews, reminders, and the weekly compliance digest.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / workflowEmails
        Added value: +{
        +  "description": "Emails when an automation or workflow run fails.",
        +  "type": "boolean"
        +}
    • Addedupdate_page
    • Changedupdate_project9 fields changed
      • addedInput schema / properties / billingModel
        Added value: +{
        +  "description": "How the project bills: TIME_AND_MATERIALS (hours x rate), FIXED_FEE (feeAmount recognised by approved-hours share of estimatedHours, capped), RETAINER (retainerAmount per retainerPeriod, over-servicing above retainerIncludedHours), MILESTONE (milestoneSchedule amounts recognised as linked milestones complete). Changing it clears the other models' terms.",
        +  "enum": [
        +    "TIME_AND_MATERIALS",
        +    "FIXED_FEE",
        +    "RETAINER",
        +    "MILESTONE"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / estimatedHours
        Added value: +{
        +  "description": "FIXED_FEE: hours the fee was priced on.",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / feeAmount
        Added value: +{
        +  "description": "FIXED_FEE / MILESTONE: the sold fee, distinct from budget (the cost plan).",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / milestoneSchedule
        Added value: +{
        +  "description": "MILESTONE: [{ label, amount, milestoneId? }], each milestone linked at most once.",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "amount": {
        +        "type": "number"
        +      },
        +      "label": {
        +        "type": "string"
        +      },
        +      "milestoneId": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "required": [
        +      "label",
        +      "amount"
        +    ],
        +    "type": "object"
        +  },
        +  "type": [
        +    "array",
        +    "null"
        +  ]
        +}
      • removedInput schema / properties / progress
        Removed value: -{
        -  "description": "Integer 0-100.",
        -  "type": "number"
        -}
      • addedInput schema / properties / retainerAmount
        Added value: +{
        +  "description": "RETAINER: fee per period.",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / retainerIncludedHours
        Added value: +{
        +  "description": "RETAINER: hours the fee covers per period.",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / retainerPeriod
        Added value: +{
        +  "enum": [
        +    "WEEK",
        +    "MONTH",
        +    "QUARTER",
        +    null
        +  ],
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / statusDate
        Added value: +{
        +  "description": "ISO date the schedule is reported \"as of\" (MS Project Status Date, P6 Data Date). null clears, meaning today.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedupdate_task8 fields changed
      • addedInput schema / properties / actualStart
        Added value: +{
        +  "description": "ISO date work actually began. Stamped automatically from startDate the first time the task leaves TODO or gains progress. Changing it on a task that is not DONE and not pinned by MSO or MFO moves startDate to it and dueDate to where the remaining work finishes; sending dates too lets the dates win. null clears.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • changedInput schema / properties / constraintType / description
        Previous value: -"MS Project constraint: ASAP / SNET / FNLT / MSO, or null to clear."New value: +"MS Project constraint: ASAP/ALAP (as soon/late as possible), MSO/MFO (must start/finish on), SNET/FNET (start/finish no earlier than), SNLT/FNLT (start/finish no later than), or null to clear."
      • changedInput schema / properties / constraintType / enum
        Previous value: -[
        -  "ASAP",
        -  "SNET",
        -  "FNLT",
        -  "MSO",
        -  null
        -]New value: +[
        +  "ASAP",
        +  "ALAP",
        +  "MSO",
        +  "MFO",
        +  "SNET",
        +  "SNLT",
        +  "FNET",
        +  "FNLT",
        +  null
        +]
      • addedInput schema / properties / isManual
        Added value: +{
        +  "description": "For a task with subtasks: true keeps its own dates, false takes its start and due from its subtasks, null follows the project.",
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / originalDurationMinutes
        Added value: +{
        +  "description": "Planned duration in working minutes (a day is the project calendar's hoursPerDay, default 8h = 480). Setting it on a task with a startDate moves dueDate to match; sending dates too lets the dates win. null clears.",
        +  "minimum": 0,
        +  "type": [
        +    "integer",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / priority / description
        Added value: +"Priority label (LOW/MEDIUM/HIGH/CRITICAL) that people set to rank work. It is not the critical path: the schedule engine computes that from dependencies, durations and the calendar, and priority does not change it."
      • changedInput schema / properties / reason / description
        Previous value: -"Free-text reason for the update. Adds a comment + appears in the notification body."New value: +"Free-text reason for the update, up to 5000 chars. Adds a comment + appears in the notification body."
      • addedInput schema / properties / remainingDurationMinutes
        Added value: +{
        +  "description": "Working minutes left. Defaults to original x (1 - progress); DONE forces 0. On a started task (actualStart set) that is not DONE and not pinned by MSO or MFO, changing it moves dueDate to where that work finishes, counted from the later of actualStart and the project status date; sending dates too lets the dates win. null clears.",
        +  "minimum": 0,
        +  "type": [
        +    "integer",
        +    "null"
        +  ]
        +}
    • Addedupdate_task_collaborators
    • Addedupload_library_document
    • Changedupload_task_attachment2 fields changed
      • addedInput schema / properties / sha256
        Added value: +{
        +  "description": "Optional but recommended: SHA-256 of the RAW file bytes, 64-char hex. Rejected if the decoded bytes do not match (catches truncated/garbled base64).",
        +  "type": "string"
        +}
      • addedInput schema / properties / sizeBytes
        Added value: +{
        +  "description": "Optional but recommended: exact byte length of the RAW file. Rejected if the decoded length differs (catches truncation).",
        +  "type": "number"
        +}
  10. 236 tool updates
    • Addedadd_ccb_member
    • Addedadd_project_member
    • Addedadd_project_to_portfolio
    • Addedadd_subtasks
    • Addedadd_timesheet_approver
    • Addedadvance_proposal_stage
    • Addedagent_bootstrap
    • Addedanalyze_project_risks
    • Addedappend_log
    • Addedapprove_timesheet_entry
    • Addedapprove_timesheet_week
    • Addedassign_tag
    • Addedassign_task
    • Addedattach_link
    • Addedattach_sharepoint_document
    • Addedaudit_filter_metadata
    • Addedauto_detect_import_risks
    • Addedbulk_assign
    • Addedbulk_create_tasks
    • Addedbulk_update_status
    • Addedbulk_update_tasks
    • Addedcalculate_evm
    • Addedcalculate_evm_history
    • Addedcancel_workflow_run
    • Addedcapture_baseline
    • Addedcompose_meeting_invite
    • Addedcompute_risk_patterns
    • Addedcreate_change_request
    • Addedcreate_comment
    • Addedcreate_custom_field_def
    • Addedcreate_epic
    • Addedcreate_evaluation_criterion
    • Addedcreate_goal
    • Addedcreate_issue
    • Addedcreate_key_result
    • Addedcreate_library
    • Addedcreate_milestone
    • Addedcreate_portfolio
    • Addedcreate_project
    • Addedcreate_proposal
    • Addedcreate_sprint_with_tasks
    • Addedcreate_tag
    • Addedcreate_task
    • Addedcreate_timesheet_entry
    • Addedcreate_whiteboard
    • Addedcreate_wiki_page
    • Addedcreate_workspace_row
    • Addedcreate_workspace_table
    • Addedcritical_path_narrative
    • Addeddecide_workflow_approval
    • Addeddescribe_capabilities
    • Addeddescribe_schema
    • Addeddesignate_gate_reviewer
    • Addeddetect_evm_data_source
    • Addeddismiss_all_read_notifications
    • Addeddismiss_notification
    • Addeddismiss_risk
    • Addeddraft_document
    • Addedduplicate_workflow
    • Addededit_comment
    • Addedend_session
    • Addedexport_audit_log
    • Addedfetch
    • Addedfind_meeting_times
    • Addedfind_similar_projects
    • Addedgantt_optimize
    • Addedgenerate_status_report
    • Addedget_ai_budget
    • Addedget_audit_entry
    • Addedget_baseline
    • Addedget_capacity
    • Addedget_change_request
    • Addedget_change_request_history
    • Addedget_custom_field_values
    • Addedget_document_history
    • Addedget_document_metadata
    • Addedget_epic
    • Addedget_issue
    • Addedget_issue_history
    • Addedget_milestone
    • Addedget_my_quota_usage
    • Addedget_notification_preferences
    • Addedget_plan
    • Addedget_plan_features
    • Addedget_portfolio
    • Addedget_project
    • Addedget_project_history
    • Addedget_project_velocity
    • Addedget_proposal
    • Addedget_proposal_history
    • Addedget_row_history
    • Addedget_seat_count
    • Addedget_sprint
    • Addedget_subtree
    • Addedget_task
    • Addedget_task_history
    • Addedget_team
    • Addedget_template
    • Addedget_user_input
    • Addedget_webhook
    • Addedget_whiteboard
    • Addedget_wiki_page
    • Addedget_workflow
    • Addedget_workflow_run
    • Addedget_working_calendar
    • Addedget_workspace_table
    • Addedimplement_change_request
    • Addedinstantiate_plan
    • Addedinstantiate_template
    • Addedleveling_narrative
    • Addedlink_dependency
    • Addedlink_issue
    • Addedlist_assigned_tasks
    • Addedlist_audit_log
    • Addedlist_baselines
    • Addedlist_calendar_events
    • Addedlist_ccb_members
    • Addedlist_change_requests
    • Addedlist_comments
    • Addedlist_compliance_exceptions
    • Addedlist_custom_field_defs
    • Addedlist_dependencies
    • Addedlist_documents
    • Addedlist_epics
    • Addedlist_evaluation_criteria
    • Addedlist_gate_approvals
    • Addedlist_gate_reviewers
    • Addedlist_issues
    • Addedlist_libraries
    • Addedlist_mentions
    • Addedlist_milestones
    • Addedlist_my_operations
    • Addedlist_my_tasks
    • Addedlist_notification_types
    • Addedlist_notifications
    • Addedlist_org_members
    • Addedlist_org_risk_patterns
    • Addedlist_org_risks
    • Addedlist_outlook_messages
    • Addedlist_overdue
    • Addedlist_projects
    • Addedlist_proposal_reviews
    • Addedlist_proposals
    • Addedlist_recent_activity
    • Addedlist_recycle_bin
    • Addedlist_related_issues
    • Addedlist_related_tasks
    • Addedlist_risks
    • Addedlist_sharepoint_sites
    • Addedlist_sprints
    • Addedlist_tags
    • Addedlist_task_attachments
    • Addedlist_tasks
    • Addedlist_team_members
    • Addedlist_teams
    • Addedlist_templates
    • Addedlist_timesheet_approvers
    • Addedlist_timesheet_entries
    • Addedlist_webhook_deliveries
    • Addedlist_webhook_events
    • Addedlist_webhooks
    • Addedlist_whiteboards
    • Addedlist_wiki_pages
    • Addedlist_workflow_approvals
    • Addedlist_workflow_runs
    • Addedlist_workflows
    • Addedlist_working_calendars
    • Addedlist_workspace_rows
    • Addedlist_workspace_tables
    • Addedlookup_governance_alerts
    • Addedlookup_help_topic
    • Addedmark_all_notifications_read
    • Addedmark_notification_read
    • Addedmove_task_to_epic
    • Addedmove_task_to_sprint
    • Addedparse_pasted_schedule
    • Addedpost_teams_channel_message
    • Addedpropose_assignment
    • Addedpropose_deadline_extension
    • Addedpropose_dependency
    • Addedpropose_milestone_completion
    • Addedpropose_status_change
    • Addedpropose_task_split
    • Addedread_agent_brief
    • Addedread_document_content
    • Addedread_task_attachment
    • Addedrefresh_link_preview
    • Addedreject_timesheet_entry
    • Addedreject_timesheet_week
    • Addedrequest_user_input
    • Addedresolve_issue
    • Addedresource_leveler_analyze
    • Addedsave_project_as_template
    • Addedschedule_health_check
    • Addedsearch
    • Addedsearch_org_knowledge
    • Addedsend_outlook_message
    • Addedset_bulk_custom_field_values
    • Addedset_capacity
    • Addedset_custom_field_value
    • Addedsubmit_change_request
    • Addedsubmit_cr_review
    • Addedsubmit_proposal_review
    • Addedsubmit_timesheet
    • Addedsubmit_timesheet_week
    • Addedsummarize_project
    • Addedtest_run_workflow
    • Addedtest_webhook
    • Addedunassign_tag
    • Addedunlink_dependency
    • Addedupdate_custom_field_def
    • Addedupdate_document_content
    • Addedupdate_epic
    • Addedupdate_evaluation_criterion
    • Addedupdate_goal
    • Addedupdate_issue
    • Addedupdate_key_result_value
    • Addedupdate_member_role
    • Addedupdate_milestone
    • Addedupdate_notification_preferences
    • Addedupdate_portfolio
    • Addedupdate_project
    • Addedupdate_proposal
    • Addedupdate_sprint
    • Addedupdate_task
    • Addedupdate_template
    • Addedupdate_timesheet_entry
    • Addedupdate_whiteboard
    • Addedupdate_wiki_page
    • Addedupdate_workspace_row
    • Addedupload_task_attachment
    • Addedweek_status
    • Addedweekly_compliance
    • Addedwhoami
    • Addedwithdraw_change_request
    • Addedworkflow_stats

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.